引用类型和值类型作为参数的值是否会传递的浅解

一直对这个问题有点模糊,今天看了下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值也不能被转递

 

posted @ 2012-09-15 11:56  Mr c  阅读(150)  评论(0编辑  收藏  举报