java 值传递 或 引用传递?

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

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

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

先无论值传递仍是引用传递,直接来看例子code

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 + "\nb:" + b);  changeValue(a, b);  System.out.println( "改变后a:" + a + "\nb:" + b);  }

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

输出blog

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

  理解内存图内存

 

 

 

 

 

 

eg(2)it

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 + "\nb:" + b);  changeValue(a, b);  System.out.println( "改变后a:" + a + "\nb:" + b);  }

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

输出class

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

 理解内存图引用

 

相关文章
相关标签/搜索