基本数据类型:值传递
引用数据类型:引用传递
String类型比较特殊:java中的参数传递实际是将对象复制一份进行传递,以下面的代码为例,输出结果为ABC 而不是123
public class Test {
public static void main(String[] args) {
Test test = new Test();
String s = "ABC";
test.change(s);
System.out.println(s);
}
void change(String s){
s= "123";
}
}
1.将s的引用复制一份 s2传递给change方法
2.然后change要改变s的值,相当于改变s2的值,因为string被final修饰,是不可变的所以,会重新再堆内存中分配空间储存“123” 并且将地址给s2
3.所以再main方法中调用change方法以后,打印的是s指向的堆内存的地址。s 和 s2 指向的内存地址不是同一个了,s对应的是“ABC” s2对应“123”.
主要是因为String封装类型的不可变导致改变引用的对应内存空间存储对象的值时,不能对原对象操作,要重新new一个对象,导致两个引用的值不相等。普通的对象,当我们复制一份引用,他们指向同一个内存对象,当改变对象内容后,没有重新new一个新的对象,所以两个引用的值还是一样的.