基本可认为与C++相同,但是有一点值得注意的地方是:赋值的时候,可能会存在“别名”的现象:
package c03; class Number { int i; } public class Assignment { public static void main(String[] args) { Number n1 = new Number(); Number n2 = new Number(); n1.i = 9; n2.i = 47; System.out.println("1: n1.i: " + n1.i + ", n2.i: " + n2.i); n1 = n2; System.out.println("2: n1.i: " + n1.i + ", n2.i: " + n2.i); n1.i = 27; System.out.println("3: n1.i: " + n1.i + ", n2.i: " + n2.i); } } ///:~
如果是采用n1=n2的方式,则相当于n1和n2这两个句柄指向同一个对象,而如果采用n1.i=n2.i的方式,则是真实对象间的赋值。