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语句中的循环。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值