关于局部变量

关于局部变量(易错)

在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方法中通过传递参数改变变量的值

猜你喜欢

转载自blog.csdn.net/kallenAB/article/details/125837092