JAVA基础疑难——001Boolean类型传值问题

今天在帮助一位小伙伴解决传值的问题的时候,发现他使用的是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语句中的循环。

猜你喜欢

转载自blog.csdn.net/qq_31914787/article/details/81221140