public class TestString {          int a=0;
/**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
                  TestString t=new TestString();
t.a=2;
change_Obj(t);
System.out.println(t.a); String str=new String("abc");
change_String(str);
System.out.println(str);
}
public static void change_String(String str)
{
str+="aaa";
}
         public static void change_Obj(TestString obj)
{
obj.a+=1;
}
}
输出结果:
3
abc
String 类型的变量str不也是对象吗?为什么传递的时候传的是值而不是引用。
obj传递的则是引用。

解决方案 »

  1.   

    LZ理解错了,这两样都是值传递
    change_Obj(TestString obj)
    传的是 obj
    obj.a +=1
    没有改变 obj,仅仅是改变了 obj.a str+="aaa";
    这个改变的是 str,不会影响调用函数的 str
      

  2.   

    string是不变对象,每次操作都返回新的一个string,str+="aaa" 只是把 str + "aaa" 返回的对象给了str。原来调用函数的那个str没变
      

  3.   

    String str中的str不是一个对象吗?怎么在str的内容“aaa”会存放在栈中?而不和其它对象一样,把内容存放在堆中?