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两个引用变量是相等而独立的