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,应该如何写代码??
这个问题不要用一个个赋值的傻瓜方式,我这只是举个例子,如果列举变量一多,明显是不现实的!!
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,应该如何写代码??
这个问题不要用一个个赋值的傻瓜方式,我这只是举个例子,如果列举变量一多,明显是不现实的!!
只是把 blAdd, blModify, blDel 对应的值赋过去了
相当private boolean[] blAll = { false, false, false};for (int i = 0; i < blAll.length; i++)
blAll[i] = false;
这里不影响 blAdd的值
for (int i = 0; i < blAll.length; i++)
blAll[i] = false;这句你已经把blAll的所有元素(即blAdd,blModify,blDel)都赋值false了啊,
你是什么问题?
这样声明赋值之后blAll[0]已经为false,它现在跟blAdd没有关系,换成Object也一样,没有关系了,只是在此次声明赋值后此时的值相等而已。
================================
你用数组给blAdd,blModify,blDel赋值false干吗?
你不赋值,blAdd,blModify,blDel缺省就是false
这个问题不要用一个个赋值的傻瓜方式,我这只是举个例子,如果列举变量一多,明显是不现实的!!
====================================
要是一个个赋true值,就得傻瓜一下了,但是不觉得那么多字段都得赋true值不是傻瓜好久吗?
System.out.print(blAdd);
而在前面你已经写了:blAdd = true;所以你永远都会输出true~~!!与你的blAll没有任何关系~
boolean是基本数据类型,等号相当于复制,Boolean是类,相当于传地址。这样lz的循环赋值就能实现了。
cangying747() 说得好~ 但是怎么实现?麻烦贴代码上来.(理论我明白...但是...@#%!lz已经把我搞晕了~)
private Boolean blAdd; //如果不new就是null啦!如果new就跟lz的奇怪的想法不一样了?晕~
private Boolean blModify;
private Boolean blDel; private Boolean[] blAll = { blAdd, blModify, blDel }; public ArrayTestDemo() {
// blAdd =new Boolean(true); for (int i = 0; i < blAll.length; i++)
blAll[i] =Boolean.valueOf(false); System.out.println(blAdd); //null
System.out.println(blModify);//null
System.out.println(blDel); //null
System.out.println(blAll[0]);//这样才是false...麻烦 ...搞得好晕...不正常...闪~
}
这些变量初始值是false,然后在程序处理过程中变成了true,现在我想通过for循环,把所有的变量再都赋值为false,具体应该怎么coding?你们将了一大堆理论,却没有人给出实际有效的办法。
------- ------ ------- -------
| false<--是值不是地址 | true | | false | | false |
| false | ------ ------- -------
| false |
-------
你说数组中的3个false跟变量:blAdd,还有什么关系吗?所以你再怎么改数组中的值,也不会改变成员变量的值的.(他们根本就没关系了)
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();
}
}
boolean创建的变量是对象么,有引用么??能用引用改变变量值么
偶刚学java 基本问题都懂都
private boolean[] blAll = { blAdd, blModify, blDel };
这是对数组blAll的初始化,而且是基本类型的数组。
不同于引用类型。就类似于:
private int[] blAll = { 3, 5, 7};
你可以选择其他方法。
> 这些变量初始值是false,然后在程序处理过程中变成了true,
> 现在我想通过for循环,把所有的变量再都赋值为false,具体
> 应该怎么coding?你们将了一大堆理论,却没有人给出实际有效的办法。既然你在 class 里一个一个地定义了多个变量,就没办法简单地用 for 循环给它们赋值了。不过,你可以考虑用反射的方法遍历每个属性,然后给它们赋值。虽然能在一定程度上解决你提出的问题,但这样并不是一个好的编程习惯。
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"));
}
}看一下这个能不能满足你要的!
在实际开发中我建议你还是把他们都放在一个函数里调用.