日期:2014-05-20  浏览次数:20793 次

求一个关于boolean赋值的问题??
public   class   Test   {

private   boolean   blAdd;

private   boolean   blModify;

private   boolean   blDel;

private   boolean[]   blAll   =   {   blAdd,   blModify,   blDel   };

public   Test()   {
blAdd   =   true;

for   (int   i   =   0;   i   <   blAll.length;   i++)
blAll[i]   =   false;

System.out.print(blAdd);
}

public   static   void   main(String   args[])   {
new   Test();
}
}

为什么输出的是true?如果想把blAll的所有元素(即blAdd,blModify,blDel)都赋值false,应该如何写代码??
这个问题不要用一个个赋值的傻瓜方式,我这只是举个例子,如果列举变量一多,明显是不现实的!!

------解决方案--------------------
private boolean[] blAll = { blAdd, blModify, blDel };
只是把 blAdd, blModify, blDel 对应的值赋过去了
相当private boolean[] blAll = { false, false, false};

for (int i = 0; i < blAll.length; i++)
blAll[i] = false;
这里不影响 blAdd的值

------解决方案--------------------
你声明的是三个boolean变量和一个数组,不要以为数组里放的是声明的三个变量
------解决方案--------------------
前面不是有人说了吗?你那3个成员变量跟数组已经没有关系了,数组中存的仅仅是3个boolean成员变量的值罢了,private boolean[] blAll = { false, false, false};

blAll数组: 变量:blAdd 变量:blModify 变量:blDel;
------- ------ ------- -------
| false <--是值不是地址 | true | | false | | false |
| false | ------ ------- -------
| false |
-------
你说数组中的3个false跟变量:blAdd,还有什么关系吗?

所以你再怎么改数组中的值,也不会改变成员变量的值的.(他们根本就没关系了)
------解决方案--------------------
> 看了一大堆,并没有把我的问题真正解决
> 这些变量初始值是false,然后在程序处理过程中变成了true,
> 现在我想通过for循环,把所有的变量再都赋值为false,具体
> 应该怎么coding?你们将了一大堆理论,却没有人给出实际有效的办法。

既然你在 class 里一个一个地定义了多个变量,就没办法简单地用 for 循环给它们赋值了。

不过,你可以考虑用反射的方法遍历每个属性,然后给它们赋值。虽然能在一定程度上解决你提出的问题,但这样并不是一个好的编程习惯。
------解决方案--------------------
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public class Test {

public Test() {
}

public static void main(String args[]) {
Map <String,Boolean> Intmap = new HashMap <String,Boolean> ();
Intmap.put( "blAdd ",new Boolean(true));
Intmap.put( "blModify ",new Boolean(true));
Iterator <String> iter = Intmap.keySet().iterator();
// update before
System.out.println(Intmap.get( "blAdd "));
System.out.println(Intmap.get( "blModify "));

while(iter.hasNext()){
Intmap.put(iter.next(),new Boolean(false));
}

// update after
System.out.println(Intmap.get( "blAdd "));
System.out.println(Intmap.get( "blModify "));

}
}

看一下这个能不能满足你要的!
在实际开发中我建议你还是把他们都放在一个函数里调用.