引用类型和值类型作为参数的值是否会传递的浅解
一直对这个问题有点模糊,今天看了下api,又在网上看了下别人的贴子,在结合自己写的几个测试类,总算是对这个问题有个浅显易懂的认识了.
String、Integer、Double等等虽然都是引用类型,但是和一般引用类型不一样,它们都是immutable,也就是说不可改变,也可以说他们没有set方法。
当这些特殊的引用类型作为方法参数时(9行),参数在方法中被改变时(3行),不是在原先被被分配的内存区域中作改变,而是会另外在内存的堆栈中开辟一块新的区域存放改变的值。所以这些类型虽然是引用类型,虽然在方法中被修改,但是变量仍然指向的未被方法改变的内存区域。
1 public class Demo305 { 2 void change(String str){ 3 str+="change"; 4 } 5 6 public static void main(String[] args) { 7 String str="test"; 8 Demo305 test=new Demo305(); 9 test.change(str); 10 System.out.println(str); 11 } 12 }
输出结果
test
同理,String[],Map、Set等集合中的String值也不能被转递