public class A{
public void change(StringBuffer a)
{
a=new StringBuffer("aaaaaaaa");
}
public static void main(String [] args)
{ Stringbuffer str=new StringBuffer("1111");
A temp=new A();
A.change(str);
System.out.println(str);}
}
打印出来的为什么还是1111。
str是作为一个对象传递到change方法中的呀!在change方法里改变了str所指向的字符串(即aaaaaaa),所以打印出的应是aaaaaaa呀!小弟刚学JAVA不久,麻烦各位解答一下,叩谢!!!
public void change(StringBuffer a)
{
a=new StringBuffer("aaaaaaaa");
}
public static void main(String [] args)
{ Stringbuffer str=new StringBuffer("1111");
A temp=new A();
A.change(str);
System.out.println(str);}
}
打印出来的为什么还是1111。
str是作为一个对象传递到change方法中的呀!在change方法里改变了str所指向的字符串(即aaaaaaa),所以打印出的应是aaaaaaa呀!小弟刚学JAVA不久,麻烦各位解答一下,叩谢!!!
java用的是只传递 所以结果就是那样的
在执行的时候 所处 的 雷村地址是不一样的
str ----> "1111" // new 了一个StringBuffer("1111")
a -----> "aaaaaaaa" // 调用temp.change(str)方法中也 new 了一个StringBuffer("aaaaaaaa"),此时并不会改变 str 引用的对象,也不会改变 str;但如果你这样:str = a //将 a 的引用赋值给 str;
str ----> "aaaaaaaa"
//下面的1111是在常量池中存储的常量字符串对象
1.Stringbuffer str=new StringBuffer("1111");// 此时str->1111(即str指向的是1111)
2.A temp=new A();
A.change(str); //此时a=str ->1111(即a也跟str一样指向1111,也就是说这个时候,a->1111,str->1111);
3. a=new StringBuffer("aaaaaaaa");//执行到这步的时候,在常量池中又创建了一个aaaaaaaa对象,此时的a变为指向aaaaaaaa了,即a->aaaaaaaa,而原来的str没有改变,还是指向原来的1111。