两种情况:主数据类型和对象赋值
a. 对主数据类型的赋值是非常直接的。由于主类型容纳了实际的值,而且并非指向一个对象的句柄,所以在为其赋值的时候,可将来自一个地方的内容复制到另一个地方。例如,假设为主类型使用“A=B”,那么 B 处的内容就复制到A。若接着又修改了 A,那么 B 根本不会受这种修改的影响。
String a = "java";
String b;
b = a;
a = "c++";
输出a = c++ b = java
b. 但在为对象“赋值”的时候,情况却发生了变化。对一个对象进行操作时,我们真正操作的是它的句柄。所以倘若“从一个对象到另一个对象”赋值,实际就是将句柄从一个地方复制到另一个地方。这意味着假若为对象使用“C=D”,那么C 和 D 最终都会指向最初只有 D 才指向的那个对象。
Number n1 = new Number();
Number n2 = new Number();
n1.number = 1;
n2.number = 1;
此时 n1 == n2// 地址相同
Number n1 = new Number();
Number n2 = new Number();
n1.number = 1;
n2.number = 1;
n2 = n1;
n1.number = 2;
此时n1.number == 2, n2.number == 2
总结:
主数据类型的赋值和对象赋值不同,对象赋值是复制的句柄,对象之间是连着的。