@XQF
2017-02-15T21:46:55.000000Z
字数 999
阅读 1241
java
很是在纠结什么是值传递,什么是引用传递。其实本质上来说都是值传递。只不过引用传递或者地址传递传递的是引用或者地址的值。
因为java中方法的参数类型总体来分的话有两种,一种是基本数据类型,一种是引用。基本数据类型的参数传递是值传递,在方法调用过程中,实参会把值传递给形参,形参只是用实参的值初始化一个副本(临时存储单元),因此虽然形参和实参是有相同的数值,但是他们存在不同的存储单元,根本就不是一档子事。
实例也就不写了,实在是记忆深刻,在学C语言交换两个数值内容的时候是尝尽了苦头。当时也没有学习关于对象,引用的知识。只是用地址解释了,虽然地址是本质原因,但是,。,那个时候谁能理解到呀
把引用传递给形参,相当于是把对象的地址传递给了形参,于是我在方法中修改对象内容,这个修改会同步到该对象。
public class Test {
public static void print(StringBuffer sb) {
sb.append("World");
System.out.println("中" + sb);
}
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("Hello ");
System.out.println("前" + sb);
print(sb);
System.out.println("后" + sb);
}
}
前Hello
中Hello World
后Hello World
在写引用传递实例的时候,我使用了String类,发现不成功。为什么?
原因在于String类型是一个不可变对象,表面上对str的修改实际上是将引用变量引用到了一个新建的对象,而原来引用变量指向的对象就被抛弃了,根本就没有发生任何改变
不可变对象的错误使用
public class Test {
public static void print(String str) {
str="中 "+str;
}
public static void main(String[] args) {
String str="Hello";
System.out.println("前 "+str);
print(str);
System.out.println("后 "+str);
}
}