1:赋值相关
为变量进行赋值时是改变它的值,不改变它所指向的储存空间。
而为对象进行赋值时是改变它所指向的存储空间。
比如说如下代码:
1 class Number{ 2 int i; 3 } 4 public class Assignment{ 5 public static void main{String[] args){ 6 Number n1 = new Number(); 7 Number n2 = new Number(); 8 n1.i=10; 9 n2.i=50; 10 n1=n2; 11 n1.i=30; 12 } 13 }
当new了两个类n1,n2时,两个分别指向不同的储存空间,此时它们是各自独立的,对其中之一进行赋值,另一个也不会受到影响。令n1=n2之后,便是将n2指向了n1所在的储存空间,此时该储存空间便有两个名字n1,n2。不管改变两者中任何一个实质上都是修改该储存空间中的值,在代码中也可看到n1.i=30之后若是输出n2.i,那么显示的值也是30。
如果想要让n1,n2继续保持独立,仅仅是对其中的i值进行改变,那么可以将第十行的n1=n2修改为n1.i=n2.i,此时操作的就是两个变量,而不是两个类,那么n1n2也将继续保持独立
所以在实际代码编写中如非必要尽量避免对类的直接赋值,这样会带来很多意想不到的错误。
PS:由于脱胎于java,C#也具有以上类似的性质
浙公网安备 33010602011771号