1 Java值传递
Java原始数据类型在传递时以值传递,而包装类和其他的类在传递时是按引用传递的。
s1按照引用传递,n按照值传递,所以passParam(s1, n) 函数会修改s1的内容,而n的值不变。
将n的类型改为int的包装类Integer:
可以看到,打印的结果不变,这是为什么呢?
n还是按照引用传递的,只是由于Integer是不可变类,没有提供改变它的值的方法,程序中在执行n1 = 8时,实际上是会创建一个新的临时的Integer(值为8),然后将这个临时的引用传递给n1,方法调用完成后,由于n1是局部变量,n1的值在函数调用完成后就消失了,此时n的值不会改变。
具体过程可以看下面的调试过程:
所以不能理解为Integer是按照值传递的方式传递的,虽然结果看上去好像是的。
2 Java 引用传递
同样的:
ss2 = ss1 只会修改ss2的值而对s2没有影响。
不可变类:当创建了这个类的实例后,就不允许修改它的值。也就是一个对象一旦创建出来,在其整个生命周期中,它的成员变量就不能被修改了。例如Integer、Float、String、StringBuffer等类都是不可变类。
在java.lang包中对StringBuffer的定义为:
对Integer为: