class ReferencesTest {
    public static void main(String[] arguments) {
        Point pt1, pt2;
        pt1 = new Point(100, 100);
        pt2 = pt1;        pt1.x = 200;
        pt1.y = 200;
        System.out.println("Point1: " + pt1.x + ", " + pt1.y);
        System.out.println("Point2: " + pt2.x + ", " + pt2.y);
    }
}
答案:Point1: 200, 200
Point2: 200, 200
为什么不是Point1: 200, 200
Point2: 100,100呢,
Point pt1, pt2;
        pt1 = new Point(100, 100);
        pt2 = pt1;        pt1.x = 200;
        pt1.y = 200;
        System.out.println("Point1: " + pt1.x + ", " + pt1.y);
        System.out.println("Point2: " + pt2.x + ", " + pt2.y);
等于Point pt1, pt2;
        pt1 = new Point(100, 100);
                pt1.x = 200;
        pt1.y = 200;
        pt2 = pt1;
        System.out.println("Point1: " + pt1.x + ", " + pt1.y);
        System.out.println("Point2: " + pt2.x + ", " + pt2.y);么?????

解决方案 »

  1.   

    pt2 = pt1;
    之后pt2,pt1指向了同一个内存单元
      

  2.   

    嗯如果pt2 = pt1;之后操作pt2 与操作pt1是一样的(不包含重新给分配内存的情况)也就是说,使pt2指向其它内存对pt1没有影响,如:
    pt2=new Point(1,1);
      

  3.   

    把Point类发出来看下,如果没有猜错的话
    Point类在定义变量的时候用了static
    可能是:
    private static int x;
    privtat static int y;
      

  4.   


     pt1 = new Point(100, 100);//这时候Point1: 100,100
     pt2 = pt1;                //pt2被赋予pt1的实例(pt1和pt2引用相同的实例),
                               //point2:100,100   pt1.x = 200;
     pt1.y = 200;              //point1:200,200,由于pt1和pt2引用相同的实例
                               //point2:200,200
      

  5.   

    把Point类发出来看下,如果没有猜错的话
    Point类在定义变量的时候用了static
    可能是:
    private static int x;
    privtat static int y;
    没有static也是这样
      

  6.   

    java_augur(听着音乐 ☆☆☆☆☆☆) 强!!!!!!!!名字比较强
      

  7.   

    这个程序之所以与楼主本人的意愿不符,主要就是发生了“别名现象”,就是楼上朋友说的引用指向了相同的对象我这里举个前人的例子,我把带码简化一下
    class Point{
      int x
    }
    public class ReferencesTest{
      public static void main(String[] args){
      Point p1=new Point();
      Point p2=new Point();
      p1.x=100;
      p2.x=200;
      System.out.println("p1.x="+p1.x+"p2.x="+p2.x);
      p1=p2;//当我们进行对象相互赋值的时候,实际上是把它们的“引用”复制了
      System.out.println("p1.x="+p1.x+"p2.x="+p2.x);
       }
    }
    我举的这个前人的例子虽说和楼主的不太一样,但是原理是一样的,楼主可以试着执行,看一下结果的区别,就会很容易明白了。(小生比较懒,就不RESULT了)最后说的是,如果想避免这种“别名”问题怎么办,可以把这两个对象独立,把上面p1=p2;换成p1.x=p2.x;试试看
      

  8.   

    Point才是对象.pt1和pt2都是引用.都是指向对象内存空间的变量,这两个变量并没有内存的,
    当运行到pt2=pt1这条语句时,就都指向了pt1 = new Point(100, 100);的这个Point对象.pt2原来所new出来的对象就无法访问到了,所以你以后操作这两个变量其实是在操作同一个内存空间,所打印出来的东西也就是一样的了...
      

  9.   

    大家说的足够多了, 我不知道在java里, 在c语言里,指针类型实际上是一个整型数存放的是一个对象(变量)在内容中的地址值