1.概述
引用类型中,java中全部都是值传递,传递对象里的值,而不会传递对象本身。
2.代码示例
public class Main {public static void main(String[] args) {Student a = new Student();Student b = new Student();a.setName("zhangsan");b.setName("lisi");System.out.println(a);System.out.println(b);swap1(a,b);System.out.println(a);System.out.println(b);swap(a,b);System.out.println(a);System.out.println(b);int c =10;int d=20;Integer e =10;Integer f=20;swap(c,d);System.out.println(c);System.out.println(d);swap(e,f);System.out.println(e);System.out.println(f);}private static void swap1(Student e, Student f) {String name = e.getName();e.setName(f.getName());f.setName(name);}private static void swap(Student e, Student f) {Student a= e;e=f;f=a;}private static void swap(int a, int b) {int c =a;a=b;b=c;}private static void swap(Integer a, Integer b) {Integer c =a;a=b;b=c;}
}
输出
Student{name='zhangsan', School='null'}
Student{name='lisi', School='null'}
Student{name='lisi', School='null'}
Student{name='zhangsan', School='null'}
Student{name='lisi', School='null'}
Student{name='zhangsan', School='null'}
10
20
10
20
3.代码逻辑
初始化状态:(左边栈,右边堆)
swap1方法执行:
出栈前:
由于新调用了swap方法,所以在栈中引入了新栈针,记作a’,b',为方法参数。a'为a的值,b'为b的值。方法执行完后,e、f、name属性出栈,a.getName()、b.getName()值发生改变。
swap方法执行:
初始化状态:
出栈:
a‘指向的是e这个对象,也就是a指向的对象,当e和f指向的对象交换时,并不影响a和b,方法执行完后,a‘、e、f出栈,a和b仍然指向之前的对象,所以a和b不会改变。
整型int的swap方法调用:
int类型的数据是整型值,所以直接在栈里分配。
同理 调用新方法、引入栈针,再声明方法参数c‘、d‘。
调用完方法后,c‘、d‘会出栈,并不会对原始的c、d值产生影响,所以值不变。