今天在帮助一位小伙伴解决传值的问题的时候,发现他使用的是boolean类型的带参方法。程序执行没有问题,但是boolen类型的值传不出来。怎么找问题都找不出来。今天就该问题所产生的原因给大家分享一下,下面我做了一个类似他的例子:
public class Boolean {
String users;
private boolean Transmit(boolean demo01){
if(users.equals("admin")){
System.out.println("用户名正确!");
demo01=true;
}else {
System.out.println("用户名错误!");
demo01=false;
}
return demo01;
}
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
Boolean boole=new Boolean();
boolean flag=false;
System.out.println("输入一个用户名:");
boole.users=input.next();
boole.Transmit(flag);
while (flag){
/* 如果flag正确传值,则输出”用户名输入正确!“*/
System.out.println("用户名输入正确!");
break;
}
System.out.println("程序退出!");
}
此时输出的结果为:
通过结果可以看出程序执行了Transmint中方法中,并正确的比对值输出"用户名正确!"在调试过程中demo01的值也成功返回了TRUE值:
那问题来了,为什么while语句未执行,并且flag的值依然是flase。
要弄懂这里的原因,则我们需要了解一下在Transmint()方法中的demo1=true是如何进行赋值的,如图:
在方法中的demo01=true;在demo01赋值中,true关键字是如何给一个对象demo01直接赋值的呢?在JDK底层如何处理?我们将它如何赋值搞懂,这个问题就解决了。我们反过来看上图,实际上,在赋值上,每次赋值都是在new一个Boolean赋值给demo01,因此,flag所指向的Boolean和demo01所指向的就不是用一个Boolean的值。所以就会有返回的demo01的值为true;而flag的值依然是flase。自然而然就不可能执行while语句中的循环。