java布尔值不在被调用方法中更改
|
参见英文答案 >
Change boolean Values?4个
这是我的场景的快照: private CustomObject1 callingMethod(){
Boolean b = Boolean.TRUE;
List<CustomObject2> list = this.calledMethod(b);
//Create CustomObject1 with b.booleanValue() as one of the arguments in the constructor
}
private List<CustomObject2> calledMethod(Boolean b){
...
...
if(condition){
b = Boolean.FALSE;
}
...
...
}
当代码到达CustomObject创建时,b.booleanValue()始终为true,即使callingMethod()中的if语句为true且该方法中的Boolean设置为false. 我不愿意将调用方法的返回类型更改为布尔值,因为它需要更改可能调用此方法的其他代码位.目前他们只需要签名更改但返回类型更改需要更多工作,因为需要维护逻辑(即填充列表然后使用它执行某些操作) 解决方法首先,在Java中有很多关于参数传递的错误信息,比如“通过引用传递对象,通过值传递基元”,这是不正确的.一切都是通过价值传递的.您没有在Java中通过引用传递对象,而是按值传递对象引用. Boolean b不包含Boolean对象,它包含一个Boolean对象的引用(指针). 这是一篇很好的文章:http://javadude.com/articles/passbyvalue.htm 其次,布尔值(与其他包装器对象和String一样)是不可变对象.因此,对于一个不可变对象,并且它们通过值传递(更好地说,它们的引用按值传递),您无法实现您想要的.你需要有一个可变对象,比如提到的@rob. 或者从Apache Commons Lang使用 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
