public static void main(String[] args) {
Point p1 = new Point(3,3);
Point p2 =p1; //p2引用p1;
p2.x=10;
System.out.println(p1.x);
}
首先这段程序输出是 10;
说明修改p2的值,影响到了p1的值,这和c中的指针有一些类似的地方,可以把p1和p2都理解为指针,而 Point(3,3)在堆中有真实的值,而p1和p2类似指向了堆中同一值
这样改变p2也就改变了p1,改变了p1也就改变了p2
public static void main(String[] args) {
Point p1 = new Point(3,3);
Point p2 = new Point(5,5); //p2引用p1;
p2=p1;
p2.x=10;
System.out.println(p1.x+" "+p1.y);
}
这个例子中输出10,3
同样是p2指向了p1,而他之引用的值 5,5 最终会进入垃圾内存回收站
而如果需要赋值而不改变其指向就需要:
public static void main(String[] args) {
Point p1 = new Point(1,1);
Point p2 = new Point(2,2); //p2引用p1;
p1.x=p2.x;
System.out.println(p1.x+" "+p1.y);
}
所以要理解 对象=对象 这种
切忌小心赋值