Java中关于引用的概念澄清

Java当中的新的引用类型创建时,需要慎重赋值其他引用类型

例如已有引用类型int a[][] = {{1,4},{1,1}};
  System.out.println(a[0][0]);
结果为1

而当创建一个新的引用类型int b[][] = a;

新的引用类型b并不会单纯复制a的内容而新建句柄,而是引用类型a和b共享相同的缓存区,其句柄相同,当对任意a或b进行修改时,

都会影响另一个引用变量

如对b进行修改:

b[0][0] = 0后

System.out.println(a[0][0]);

输出结果为0

原来的a[][] = {{1,4},{1,1}}已经借由b句柄修改成了{{0,4},{1,1}}

但同时,如果只是修改了b的句柄,则a的句柄并不会随之变化,

如假设新建int c[][] = {{3,3},{3,3}};

b = c后,System.out.println(a[0][0]);并不会输出3

而是仍然输出1

原因在于虽然在a = b后,a与b共享了相同的缓冲区,拥有的句柄也相同,但是除此之外,它们本质上仍然是两个引用变量,当其中一方的引用对象发生变化时,并不会使得另一方的引用对象也发生变化,a与b两个引用变量是相等而独立的

posted @ 2018-10-26 16:14  剑伟  阅读(163)  评论(0编辑  收藏  举报