我创建了两个类测试
package Test;
public class Test{
public Integer a;
public static void main(String[] args) {
}
Test() {
a = new Integer(0);
}
}
package Test;
public class Test2 {
public Integer a;
public Test b;
public Test2(Test b) {
a = b.a;
this.b = b;
}
public static void main(String[] args) {
Test2 a = new Test2(new Test());
System.out.println(a.a);
a.b.a=1;
System.out.println(a.a);
}
}
结果发现尽管两个类里的Integer类型理论上应该都是引用的同一个地址,但是为毛就是不行啊
构造器初始化发生在对象实例化时期,a.b.a=1;不会再去执行构造方法,可以理解吗
可以去看Integer的源码, 里面存放值value是用final修饰,是不能改变的
你修改的是引用a.b.a指向的值,跟a.a的指向有什么关系? 这是两个无关的引用,在Java里面,都指向0的时候确实是同一块内存,但是你改变了其中一个引用,跟另一个引用的指向有什么关系呢