java中引用传递和值传送的区别
来源:互联网 发布:pdf 编辑软件 编辑:程序博客网 时间:2024/06/05 11:52
public class Note {
public static void main(String args[]) {
String name[] = { "Killer", "Miller" };
String name0 ="Killer";
String name1 = "Miller";
swap(name0, name1);
System.out.println(name0 + "," + name1);
swap(name);
System.out.println(name[0] + "," + name[1]);
}
public static void swap(String name[]) {
String temp;
temp = name[0];
name[0] = name[1];
name[1] = temp;
}
public static void swap(String name0, String name1) {
String temp;
temp = name0;
name0 = name1;
name1 = temp;
}
}
输出结果:
Killer,Miller
public static void main(String args[]) {
String name[] = { "Killer", "Miller" };
String name0 ="Killer";
String name1 = "Miller";
swap(name0, name1);
System.out.println(name0 + "," + name1);
swap(name);
System.out.println(name[0] + "," + name[1]);
}
public static void swap(String name[]) {
String temp;
temp = name[0];
name[0] = name[1];
name[1] = temp;
}
public static void swap(String name0, String name1) {
String temp;
temp = name0;
name0 = name1;
name1 = temp;
}
}
输出结果:
Killer,Miller
Miller,Killer
其实画一个内存图就很清楚了
swap(String name0, String name1)
可以写成这样考虑
swap(String str0, String str1)
发现了吗?其实你传入参数的过程是将str0和str1分别指向name0和name1所以引用的地址,也就是说方法里构造了两个新的字符串,而你所做的赋值操作都是对新字符串的引用地址的改变...方法退出后name0和name1还是指向原来的地址,并没有发生任何改变...(字符串类型是一个比较特别的类型,其中还涉及到字符串的不变性,在这里你可以把它考虑成简单数据类型)
swap(String name[])
也可以这样考虑
swap(String str[])
进入方法后构造了一个数组对象str[],并将str指向name的地址(强调:此时str和name指向同一内存地址),也就是说你对str[0],str[1]的改变就是在对name地址中name[0],name[1]的改变
真的很难表述清楚,自己画个内存图就很清晰了(理解的关键是:形参是新对象,而且新对象是指向传入对象的地址)
ps: java 中不存在址传递,重新赋值其实是重定向
C 中存在址传递,传递进函数中的地址里所保存的值可以被改变
0 0
- java中 引用传递 和 值传送 的区别(网摘)
- java中引用传递和值传送的区别
- Java的值传递和引用值传递的区别
- 对于Java的值传递和引用传递的区别
- java--值传递和引用传递的区别详解
- Java值传递和引用传递的关系与区别
- java面试--"值传递"和"引用传递"的区别
- 引用传递和值传递的区别
- 值传递和引用传递的区别
- 值传递和引用传递的区别
- 值传递和引用传递的区别
- 值传递和引用传递的区别
- 值传递和引用传递的区别
- 值传递和引用传递的区别
- 值传递和引用传递的区别
- 引用传递和值传递的区别
- Java函数传递引用和值的区别
- Java的值传递和引用传递
- oracle 12
- 开放封闭原则
- Jmail的属性和方法
- WinRT StorageFile 读写操作xml
- 给你一个MD5算法
- java中引用传递和值传送的区别
- 如何显示数据库中以 OLE 对象方式存储的 JPEG 图片
- Makefile中使用shell注意点
- C++入门之谈前置++与后置++的区别
- HTML 学习笔记(二)
- greenplum数据库引擎探究
- 查看JDK和Eclipse位数
- 多线程环境下对变量的读写操作的原子性问题(一道百度笔试题引发的思考)
- MFC常用控件CListCtrl 、CSliderCtrl、CToolTipCtrl、CTreeCtrl的自绘