先看代码:
public class Test1 {
public static void main(String[] args) {
String str = new String("string类型传递:");
StringBuffer sb = new StringBuffer("stringbuffer传递:");
change(str, sb);
System.out.println(str);
System.out.println(sb);
}
static void change(String str,StringBuffer sb)
{
str = "str";
sb.append("stringbuffer");
}
}
代码运行结果:
string类型传递:
stringbuffer传递:stringbuffer
String 和StringBuffer传递的都是引用性变量,不同的是String类是final不可变类,当str变量(即string对象的存储地址)的副本传递到chang方法时,按道理来说,修改此副本中的对象内容即会修改原str变量中对应的内容,但是因为string类的不可变性,当修改副本中的内容时,jvm会新一块内存区域,并且内存中的内容为“str”,原str变量对应的内存块内容没有发生变化。