public class Main {
public static void main(String[] args) {
Person p = new Person();
String[] fullname = new String[] { "Homer", "Simpson" };
p.setName(fullname); // 传入fullname数组
System.out.println(p.getName()); // "Homer Simpson"
fullname[0] = "Bart"; // fullname数组的第一个元素修改为"Bart"
System.out.println(p.getName()); // "Homer Simpson"还是"Bart Simpson"?
}
}
class Person {
private String[] name;
public String getName() {
return this.name[0] + " " + this.name[1];
}
public void setName(String[] name) {
this.name = name;
}
}
输出: Bart Simpson
val a = "t"
System.out.println(System.identityHashCode(a))
自己打印看一下
1、fullname[0]的地址变化了,这里存的地址是字符串的地址,字符串改变之后,其指向新的字符串地址,所以这里的地址改变了
2、p.name的地址没有变,这里的地址是字符串数组name的地址,数组内部的值改变,但是数组的地址是不变的,所以这里的地址没变
1、fullname[0]的地址变化了,这里存的地址是字符串的地址,字符串改变之后,其指向新的字符串地址,所以这里的地址改变了
2、p.name的地址没有变,这里的地址是字符串数组name的地址,数组内部的值改变,但是数组的地址是不变的,所以这里的地址没变
手电筒照在紫色透明玻璃,紫光线,照到镜子上折射到墙上,改变了玻璃颜色,墙上的光颜色随着变。
fullname[0] 手电筒,值是玻璃 ,Person镜子
String 本质是一个常量 你重新赋值会重新开辟内存空间 也就是堆