Java传值问题
来源:互联网 发布:域名是啥意思 编辑:程序博客网 时间:2024/06/13 23:04
以前一直以为,传递基本类型的参数的形式是传值,传递引用类型的参数的形式是传引用。
如下:
public class TestRefParam { private static void swap(int x, int y){ int temp = x; x = y; y = x; } public static void main(String[] args) { int x =5; int y = 3; System.out.println("x="+x+","+"y="+y); swap(x, y); System.out.println("x="+x+","+"y="+y); } }
运行结果:
x=5,y=3
x=5,y=3
这是我以前一直理解的。但以下代码片段我以为的结果是
姓名:诸葛亮,年龄:12]
姓名:关羽,年龄:23]
===================
姓名:关羽,年龄:23]
姓名:诸葛亮,年龄:12]
public class TestRefParam { private static void swap(Student stu1, Student stu2){ if(stu2 != null){ //交换 Student t = new Student(); t = stu1; stu1 = stu2; stu2 = t; } } public static void main(String[] args) { Student stu1 = new Student("诸葛亮",12); Student stu2 = new Student("关羽",23); System.out.println(stu1); System.out.println(stu2); System.out.println("==================="); swap(stu1, stu2); System.out.println(stu1); System.out.println(stu2); } }
但实际上得出的结果是:
姓名:诸葛亮,年龄:12]
姓名:关羽,年龄:23]
===================
姓名:诸葛亮,年龄:12]
姓名:关羽,年龄:23]
原因如下:java中并没有所谓的传引用,在传递引用参数时,传的是把引用的副本,因此当你在被调函数中对接收的引用副本做修改,并不会影响调用函数中的参数。但如果在被调函数中,修改引用的某个属性的值,就能起作用,为什么?
我们可以这么认为,调用函数传递一张纸条(这张纸条上写着我家地址的门牌号)给被调函数,如果你修改我给你的纸条,那我该住哪,还是住哪,并不会因为你修改了我给你的纸条就搬家了;但是如果你拿着我的纸条,找到了我家,然后把我家里面的黑白电视,换成液晶电视,那么,我家里的电视的的确确被你换了。
如下代码:
public class TestRefParam { private static void swap(Student stu1, Student stu2){ if(stu2 != null){ stu2.name = "喜羊羊"; } } public static void main(String[] args) { Student stu1 = new Student("诸葛亮",12); Student stu2 = new Student("关羽",23); System.out.println(stu1); System.out.println(stu2); System.out.println("==================="); swap(stu1, stu2); System.out.println(stu1); System.out.println(stu2); } }
控制台输出:
姓名:诸葛亮,年龄:12]
姓名:关羽,年龄:23]
===================
姓名:诸葛亮,年龄:12]
姓名:喜羊羊,年龄:23]
0 0
- java传值问题.
- Java传值问题
- JAVA传值问题
- java的传值问题
- java的传值问题
- java字符串传值问题
- JAVA 传参与传值的问题.
- Java传值还是传引用问题
- Java传值的基本问题
- 关于Java中,参数传值问题.
- flex+java+blazeds传值问题
- Java引用传值的问题
- java Ajax传值乱码问题
- Java中方法参数传值问题
- 关于Java函数中的传值问题
- java方法传值的问题
- java传地址问题>?
- java值传递问题
- 【考研数学】:罗尔定理的证明
- 新博客开张,哈哈嘿嘿
- Python入门:字符转换为二进制及进制之间转换
- 求解质因数
- 限制排列与棋盘多项式
- Java传值问题
- 357. Count Numbers with Unique Digits统计各位不同的数字个数
- QT学习之路————QT程序在开发板上显示 中文字体
- HDU-Bone Collector(01背包问题)
- Maven之——插件目标及绑定
- 使用 Collectd + InfluxDB + Grafana 监控主机
- 例题3-3 回文词 UVa401
- HDU-1079 Calendar Game(博弈论)
- Qt+opencv开发笔记(1)