基本数据类型和引用数据类型赋值在内存中如下分配
public static void main(String[] args){
int count=66;
String str="MDove"
}
public class ParameterTest {
public static void main(String[] args) {
ParameterTest parameterTest =new ParameterTest();
StringBuilder str =new StringBuilder("InitialOne");
System.out.println(str);
parameterTest.change(str);
System.out.println(str);
str =new StringBuilder("InitialOne");
parameterTest.nochange(str);
System.out.println(str);
}
public void change(StringBuilder str){
str.append("Newpart");
}
public void nochange(StringBuilder str){
str=new StringBuilder("Newone");
str.append("Newpart");
}
}
成员函数的bytecode如下
change(StringBuilder)的
从字节码的操作来看,字符串被修改完以后,又被pop回去了
nochange(StringBuilder)的
从字节码的操作来看,原来的字符串被复制了一份,所有的操作都是在复制的字符串上的操作