先贴上源代码:public class Point{
float x,
y;
Point(){
x=0;
y=0;
}
Point(int x1,float y1){
x=x1;
y=y1;
}
}public class test {
public static void main(String[] args) {
List<Point> point=new ArrayList<Point>();
point.add(new Point(0,0));
point.add(new Point(1,1));
point.add(new Point(2,2));
List<Point> point1=new ArrayList<Point>(point);
List<Point> point2=point;
point1.get(1).y=100;
Point tempPoint=point1.get(1);
point1.set(1, point1.get(2));
point1.set(2, tempPoint);
Point tempPoint=point1.get(1);
point1.set(1, point1.get(2));
point1.set(2, tempPoint);
System.out.println("point:");
System.out.println("("+point.get(0).x+","+point.get(0).y+")");
System.out.println("("+point.get(1).x+","+point.get(1).y+")");
System.out.println("("+point.get(2).x+","+point.get(2).y+")"); System.out.println("point1:");
System.out.println("("+point1.get(0).x+","+point1.get(0).y+")");
System.out.println("("+point1.get(1).x+","+point1.get(1).y+")");
System.out.println("("+point1.get(2).x+","+point1.get(2).y+")");
System.out.println("point2:");
System.out.println("("+point2.get(0).x+","+point2.get(0).y+")");
System.out.println("("+point2.get(1).x+","+point2.get(1).y+")");
System.out.println("("+point2.get(2).x+","+point2.get(2).y+")");
}
}
运行结果为:
point:
(0.0,0.0)
(1.0,100.0)
(2.0,2.0)
point1:
(0.0,0.0)
(2.0,2.0)
(1.0,100.0)
point2:
(0.0,0.0)
(1.0,100.0)
(2.0,2.0)问题:
List<Point> point1=new ArrayList<Point>(point);
所以point1是创建了一个新的一模一样的point对象
List<Point> point2=point;
所以point2是跟point都是指向同一个对象Point tempPoint=point1.get(1);
point1.set(1, point1.get(2));
point1.set(2, tempPoint);
我交换了point1[1]跟point1[2],对point跟point2无影响point1.get(1).y=100;
我设置point1[1]为100,为什么会影响到point跟point2?
float x,
y;
Point(){
x=0;
y=0;
}
Point(int x1,float y1){
x=x1;
y=y1;
}
}public class test {
public static void main(String[] args) {
List<Point> point=new ArrayList<Point>();
point.add(new Point(0,0));
point.add(new Point(1,1));
point.add(new Point(2,2));
List<Point> point1=new ArrayList<Point>(point);
List<Point> point2=point;
point1.get(1).y=100;
Point tempPoint=point1.get(1);
point1.set(1, point1.get(2));
point1.set(2, tempPoint);
Point tempPoint=point1.get(1);
point1.set(1, point1.get(2));
point1.set(2, tempPoint);
System.out.println("point:");
System.out.println("("+point.get(0).x+","+point.get(0).y+")");
System.out.println("("+point.get(1).x+","+point.get(1).y+")");
System.out.println("("+point.get(2).x+","+point.get(2).y+")"); System.out.println("point1:");
System.out.println("("+point1.get(0).x+","+point1.get(0).y+")");
System.out.println("("+point1.get(1).x+","+point1.get(1).y+")");
System.out.println("("+point1.get(2).x+","+point1.get(2).y+")");
System.out.println("point2:");
System.out.println("("+point2.get(0).x+","+point2.get(0).y+")");
System.out.println("("+point2.get(1).x+","+point2.get(1).y+")");
System.out.println("("+point2.get(2).x+","+point2.get(2).y+")");
}
}
运行结果为:
point:
(0.0,0.0)
(1.0,100.0)
(2.0,2.0)
point1:
(0.0,0.0)
(2.0,2.0)
(1.0,100.0)
point2:
(0.0,0.0)
(1.0,100.0)
(2.0,2.0)问题:
List<Point> point1=new ArrayList<Point>(point);
所以point1是创建了一个新的一模一样的point对象
List<Point> point2=point;
所以point2是跟point都是指向同一个对象Point tempPoint=point1.get(1);
point1.set(1, point1.get(2));
point1.set(2, tempPoint);
我交换了point1[1]跟point1[2],对point跟point2无影响point1.get(1).y=100;
我设置point1[1]为100,为什么会影响到point跟point2?
Point tempPoint=point1.get(1);
point1.set(1, point1.get(2));
point1.set(2, tempPoint);
该操作是对point1直接操作,他跟point 还有point2不是一个object reference。所以没影响但是
point1.get(1).y=100;
该操作是对point1里面的1号元素进行操作,而point 还有point2里的1号元素跟point1里面的1号元素是同一个object reference。所以全部都被修改了。已经弄懂,结贴。
List<Point> point1=new ArrayList<Point>(point);这个构造方法底层其实就是将point1的内部数组直接赋值为point的内部数组,所以二者的内部数组是同一个引用,并不是说point1跟point是同一个引用,明显point1的引用new出来的新对象
理解是对的,有一点,List<Point> point2=point; 所以point2和point是同一个object reference