62,612
社区成员
发帖
与我相关
我的任务
分享
public class StringTest{
public static void changeString(String s)
{
s = "456";
s = s.concat("456");
}
public static void changeStringBuffer(StringBuffer s)
{
StringBuffer t = new StringBuffer("456");
s = t;
}
public static void main(String args[])
{
String m = "123";
changeString(m);
System.out.println(m);
System.out.println("change m = " + m);
System.out.println("m = " + m);
StringBuffer n = new StringBuffer("123");
changeStringBuffer(n);
System.out.println("n = " + n);
}
}
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("123");
change(sb);
System.out.println(sb);
}
static void change(StringBuffer s){
s.append("abc");
}
为什我们传递对象的时候么不需要像传值那样需要return new value呢,因为change方法接收的参数是一个sb的引用的副本,改变了目标地址的值,因此不需要return.
public static void changeStringBuffer(StringBuffer s) // 传进来是s的拷贝
{
StringBuffer t = new StringBuffer("456");
s = t; // 将拷贝的地址指向了新的对象空间,这时,s 的拷贝已经不指向之前的s 的地址了,而是刚new 的t
}
public static void main(String[] args) {
try {
String m = "123";
{
String s1 = m;
s1 = "456";
s1 = s1.concat("456");
}
System.out.println(m);
System.out.println("change m = " + m);
System.out.println("m = " + m);
StringBuffer n = new StringBuffer("123");
{
StringBuffer s2 = n;
StringBuffer t = new StringBuffer("456");
s2 = t;
}
System.out.println("n = " + n);
} catch (Throwable e) {
e.printStackTrace();
}
}
实参你不能改变的