关于局部变量

本文探讨了Java中方法参数传递的特性,指出Java只有传值调用,没有传址调用。通过实例展示了基本数据类型和引用数据类型在方法调用中的行为差异:基本类型参数在方法内修改不会影响原始值,而引用类型参数虽然引用本身不可变,但其指向的对象属性可以被修改。总结了方法参数变化的规律,帮助理解Java内存模型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于局部变量(易错)

在java中只有传值调用,没有传址调用。
直接看个案例:

  • A()方法将a变量每次调用都加1;
  • B()方法将b变量从小写b改成大写B;
  • C()方法将c[0]从"c"改成"C";
public class Test3 {
    @Test
    public  void test() {
        int a = 0;
        char b = 'b';
        char[] c = {'c'};
        A(a);
        B(b);
        C(c);
        System.out.println("a变量最终:" + a);
        System.out.println("--------------------------------------------------------");
        System.out.println("b变量最终:" + b);
        System.out.println("--------------------------------------------------------");
        System.out.println("c[0]变量最终:" + c[0]);

    }
    public void A(int a){
        if(a != 2){
            System.out.println("局部a:" + a);
            a += 1;
            A(a);
        }
    }
    public void B(char b){
        b = 'B';
        System.out.println("局部b:" + b);
    }
    public void C(char[] c){
        c[0] = 'C';
        System.out.println("局部c:" + c[0]);
    }
}

先来看看局部变量的变化:
在这里插入图片描述
可以发现局部变量a,b,c都能按要求变化。
再来看看成员变量的变化:

在这里插入图片描述
可以发现a,b变量并没有变化,这也印证了在java中只有传值调用,没有传址调用。
也就是说:

  • 对于基本数据类型,实现的是传值,只是个形参,不会改变原有值。
  • 对于引用数据类型,对这个引用进行操作,其实也是相当于对形参的操作,不会改变原来的引用。
  • 但是,当对这个引用的属性进行操作的时候,相当于CPP中的传址调用,可以改变这个引用的属性的值。

总结

1、对于基本类型参数,在方法体内对参数进行重新赋值,并不会改变原有变量的值。

2、对于引用类型参数,在方法体内对参数进行重新赋予引用,并不会改变原有变量所持有的引用。

3、方法体内对参数进行运算,不影响原有变量的值。

4、方法体内对参数所指向对象的属性进行操作,将改变原有变量所指向对象的属性值。

参考自:Java方法中通过传递参数改变变量的值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值