Java 中如何将一个类中方法的局部变量在另一个方法中调用?

需求背景:

A方法调用B方法,再调到C方法,希望A方法的一个局部变量boolean a,可以在B方法和C方法传递和改变。希望在B方法改变这个变量的值,然后控制其值在C方法的作用。

(1)刚开始是下面这样实现的,但是发现,a的值一直没有变,没有实现我的需求。

public class Test {

    public static void main(String[] args) {
        Test demo = new Test();
        boolean a = false;
        System.out.println(a); // 方法中定义的a初始化是false

        demo.test0(a);//调用方法0()
        System.out.println(a); // 经过方法0之后的  a依旧是false

        demo.test1(a);//调用方法1
        System.out.println(a);// 经过方法1之后的  a依旧是false
    }

    public void test1(boolean a){
        if (a){
            System.out.println(a + "test1" );
        }
    }

    public void test0(boolean a){
        a= true;
    }
}

原因:基本类型的参数传递是按值传递的。在Java中,基本类型的参数传递是将变量的值复制一份传递给方法,而不是传递变量本身。因此,当A方法将变量的值传递给方法B时,B方法对这个值的修改不会影响A方法中原始变量的值。

那继续,那如果基础变量不行,是不是可以考虑成员变量 或者 将变量封装为对象类型,以实现对变量值的共享和修改。

(2)那接下来将基本数据类型boolean修改为Boolean对象是不是就可以了呢?No,这个局部变量的值依旧没有被修改。

public class Test {

    public static void main(String[] args) {
        Test demo = new Test();
        Boolean a = false;
        System.out.println(a); // 方法中定义的a初始化是false

        demo.test0(a);//调用方法0()
        System.out.println(a); // 经过方法0之后的  a依旧是false

        demo.test1(a);//调用方法1
        System.out.println(a);// 经过方法1之后的  a依旧是false
    }

    public void test1(Boolean a){
        if (a){
            System.out.println(a + "test1" );
        }
    }

    public void test0(Boolean a){
        a= true;
    }
}

原因:这是因为在Java中,Boolean对象也是按值传递的。虽然Boolean是一个引用类型,但是它的值是不可变的。在方法B中修改它的值的时候,实际上是创建了一个新的Boolean对象,而不是修改原始对象。  因此无法在方法中直接修改Boolean对象的值。对于Boolean这种包装类对象,它是不可变的,也即是说一旦创建就无法修改其值。

这是因为在Java中,对于不可变对象(如Boolean、String等)每次对其进行修改时,都会创建一个新的对象来代码新的值。原始的对象保持不变,不受修改的影响。这种设计有助于确保对象的不可变性,从而提供更好的安全性和线程安全性。

最后:利用方法返回值传递局部变量的值

public class Test {

    public static void main(String[] args) {
        Test demo = new Test();
        boolean a = false;
        System.out.println(a); // 方法中定义的a初始化是false

        a = demo.test0(a);//调用方法0()
        System.out.println(a); // 经过方法0之后的  a变成true

        demo.test1(a);//调用方法1
        System.out.println(a);// 经过方法1之后的  a变成true
    }

    public void test1(boolean a){
        if (a){
            System.out.println(a + "test1" );
        }
    }

    public boolean test0(boolean a){
        a= true;
        return a;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值