package ztest; public class Test { public static void main(String[] args) { Person p1 = new Person(); Person p2 = new Person(); p1.setName("name1"); p2.setName("name2"); System.out.println(p1+" <-- 原始的 p1"); System.out.println(p2+" <-- 原始的 p2"); convert(p1, p2); System.out.println(p1+" <-- 调用方法后的 p1"); System.out.println(p2+" <-- 调用方法后的 p2"); p1 = p2; System.out.println(p1+" <-- 赋值后的 p1"); System.out.println(p2+" <-- 增值后的 p2"); } public static void convert(Person a, Person b) { a = b; System.out.println(a+" <-- p1 in method"); System.out.println(b+" <-- p2 in method"); } } class Person { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
ztest.Person@2a139a55 <-- 原始的 p1 ztest.Person@15db9742 <-- 原始的 p2 ztest.Person@15db9742 <-- p1 in method ztest.Person@15db9742 <-- p2 in method ztest.Person@2a139a55 <-- 调用方法后的 p1 ztest.Person@15db9742 <-- 调用方法后的 p2 ztest.Person@15db9742 <-- 赋值后的 p1 ztest.Person@15db9742 <-- 增值后的 p2
从输入出结果可以看到在方法体内进行 p1=p2后 ,p1确实改变了. 但是出了方法体p1还是原始的p1. 那么在Java方法调用中,对象做为参数传递的肯定不是p1的引用.
那么我们可以认为实际上在调用方法时 p1有一个影子 p1' . 这个p1'与p1指向的都是堆区上的同一个对象. p1做为对象传递时其实是传的p1',这样就可以合理的解释在方法里内改变p1的属性值是可行的.而直接对p1赋值实际上改变的是p1' 的引用,对p1本身没有影响.
再来看,如果出了方法体再进行p1=p2; 此时p1的引用会被p2覆盖,p1与p2都指向了 原始p2所在堆上的内存块.
相关推荐
java 值传递和引用传递的比较区别,包括代码及详解
Java:按值传递还是按引用传递详细解说
本人经过长时间收集的最经典、最有说服力、最易懂的关于值传递和引用传递的详解资料~包看包会~发出去真有些不舍得~
主要介绍了 Java 值传递和引用传递详解及实例代码的相关资料,需要的朋友可以参考下
不管是按值传递还是按引用传递,都是把栈中的数据备份了一份给参数变量,只不过值类型备份的是具体的数值,而引用类型备份的是内存地址
Java面向对象值传递和引用传递Java面向对象值传递和引用传递Java面向对象值传递和引用传递Java面向对象值传递和引用传递
主要为大家详细介绍了Java值传递和引用传递,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
13.java参数传递之引用传递.zip13.java参数传递之引用传递.zip13.java参数传递之引用传递.zip13.java参数传递之引用传递.zip13.java参数传递之引用传递.zip13.java参数传递之引用传递.zip13.java参数传递之引用传递....
java学习java语言的值传递和引用传递
这个在Java里面是经常被提起的问题,也有一些争论,似乎最后还有一个所谓的结论...事实上,这很容易让人迷惑,下面先分别看看什么是按值传递,什么是按引用传递,只要能正确理解,至于称作按什么传递就不是个大问题了。
java 中没有引用传递,都是值传递的,可以通过传递副本修改对象的,副本交换,并不影响原引用
主要介绍了Java中值传递和引用传递的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
当一个变量为一个参数传入方法内部的时候,会有两种不同的传递方式:值传递和引用传递。 值传递的特点:不管方法内部对传进去的参数作任何改变,也不会影响方法外部的变量的值 引用传递的特点:方法内部对传...
Java中的值传递和引用传递的区别.doc
Java语言中参数值传递和引用传递比较
Java的按值传递和按引用传递分析 Java的按值传递和按引用传递分析.pdf
java中的值传递和引用传递[汇编].pdf
java参数传递时到底是值传递还是引用传递分享.pdf
Java的按值传递和按引用传递分析.rar
java参数传递时到底是值传递还是引用传递[归类].pdf