Discuss / Java / 逐行解读代码

逐行解读代码

Topic source

Never Settle

#1 Created at ... [Delete] [Delete and Lock User]

String[] names = {"ABC", "XYZ", "zoo"};

String s = names [1];

 System.out.println(System.identityHashCode(names[1]) == System.identityHashCode(s));

names [1] = "cat";

 System.out.println(System.identityHashCode(names[1]) == System.identityHashCode(s));

System.out.println(System.identityHashCode(s));

1、这里第一段,这里声明了一个names的变量,因为是引用类型,此时会开辟一个内存地址,内存空间为3个长度,其中的每项也会开辟一个内存空间存放,"ABC", "XYZ", "zoo",然后通过下标去对应分别的内存空间。

2、第二行代码,我们声明一个叫s的变量,因为是引用类型,这里也会开辟一个内存地址,这里的s = names[1], 实际上是s指向了names[1]的地址。

3、第三行代码,这里我在names[1]复制前,用System.identityHashCode方法查看它是否一致,也就是一楼说的是否是同一把钥匙,这里打印结果是true

4、第四行代码,来到names[1] = "cat"这行,这里cat会开辟一个新的内存空间,然后names[1] 指向它,其实的内存引用已经发生变更了

4、第五行代码,来到names[1] = "cat"这行,这里cat会开辟一个新的内存空间,然后names[1] 指向它

5、第六行代码,为了验证是否是同一个引用指向,这里我执行代码System.out.println(System.identityHashCode(names[1]) == System.identityHashCode(s)),执行结果为false,说明names[1] = 'cat', 确实发生了内存指向的改变

6、经过上面的验证后,最终输出结果为"XYZ"

总结:这是我逐行分析的结果,如果有不对的地方,还请大家多多指出。


  • 1

Reply