1、方法参数的传递机制
①形参是基本数据类型:传递数据值
②形参是引用数据类型:
✦传递地址值;
✦特殊类型:String、包装类对象的不可变性。
2、String、包装类的对象的不可变性
示例代码如下,执行结果应该是:
jvm.Person@15db9742
0
0
hjy
setName
class Person{
String name;
Person(){
System.out.println(this);
}
public void setName(){
this.name = "setName";
}
}
public class ValueAndAddrDelivery {
public static void main(String[] args) {
int i = 0;
Integer j = 0;
String name = "hjy";
Person p = new Person();
ValueAndAddrDelivery v = new ValueAndAddrDelivery();
v.change(i, j, name,p);
System.out.println(i);
System.out.println(j);
System.out.println(name);
System.out.println(p.name);
}
public void change(int i,Integer j,String name,Person p){
i = 1;
j = 1;
name += " brave";
/*
执行到此处时的内存模型:由于String的不可变性(public final class String、private final char value[];)
1、main方法栈帧中的局部变量name指向字符串常量池中的"hjy";
2、change方法栈帧中的局部变量name由指向"hjy"改为指向"hjy brave",但是不会影响main方法栈帧中的局部变量name的指向(还是指向"hjy")
*/
p.setName();
}
}