java 值传递 或 引用传递?

先看下网上关于值传递和引用传递的概念

值传递:方法调用时,实际参数把它的值传递给对应的形式参数,函数接收的是原始值的一个copy,此时内存中存在两个相等的基本类型,即实际参数和形式参数,后面方法中的操作都是对形参这个值的修改,不影响实际参数的值

引用传递:也称为传地址。方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中相对应的形式参数,函数接收的是原始值的内存地址,在方法执行中,形参和实参内容相同,指向同一块内存地址,方法执行中对引用的操作将会影响到实际对象

先不管值传递还是引用传递,直接来看例子

eg(1)

public  class Test1 {
      public  static  void main(String[] args) { 
        Person a = new Person(23, "a" ); 
        Person b = new Person(22, "b" ); 
        System.out.println( "改变前a:" + a + "
b:" + b); 
        changeValue(a, b); 
        System.out.println( "改变后a:" + a + "
b:" + b); 
    }

    private  static  void changeValue(Person a, Person b) { 
         a.setAge( 10 ); 
         b.setAge( 11 ); 
    } 
}

输出

改变前a:Person [age=23] 
b:Person [age=22] 
改变后a:Person [age=10] 
b:Person [age=11]

  理解内存图

eg(2)

public  class Test1 {
      public  static  void main(String[] args) { 
        Person a = new Person(23, "a" ); 
        Person b = new Person(22, "b" ); 
        System.out.println( "改变前a:" + a + "
b:" + b); 
        changeValue(a, b); 
        System.out.println( "改变后a:" + a + "
b:" + b); 
    }

    private  static  void changeValue(Person a, Person b) { 
        Person temp = a; 
        a = b; 
        b = temp; 
    } 
}

输出

改变前a:Person [age=23 ] 
b:Person [age =22 ] 
改变后a:Person [age =23 ] 
b:Person [age =22]

 理解内存图

 

原文地址:https://www.cnblogs.com/maggiejyt/p/7777191.html