Line(Point a,Point b)
{
p1=new Point(a.getX(),a.getY());
p2=new Point(b.getX(),b.getY());
   
}

Line(Point a,Point b)
{
p1=a;
p2=b;
   
}
有什么区别。。望高手指点

解决方案 »

  1.   

    没看出来有什么实质性的区别。
    好久没用JAVA了,忘光了~@
      

  2.   

    前一种改变p1p2不会引起ab的变化,后一种会。前一种的效果相当传统语言的值传递,后一种相当是地址传递
      

  3.   

    两种情况下的p1或p2,它们的坐标是一样的,这是几何上的问题----但编程不考虑这方面,第一种情况,p1与a指向不同的对象,p2与b也指向不同的对象;第二种情况,p1与a、p2与b指向的是相同的对象。
      

  4.   

    利用传入引用的副本所指向的对象的阈值构造新的Point对象,这样新构造的对象加上原来的一共4个对象,对p1与p2对象成员变量的修改,不会影响原来的那两个对象
    Line(Point a,Point b)
    {
    p1=new Point(a.getX(),a.getY());
    p2=new Point(b.getX(),b.getY());}
    讲传入的引用副本赋给成员变量p1、p2,实际上指向还是原来的那两个对象,p1与p2对象成员变量的修改,就是对原来的那两个对象成员变量的修改Line(Point a,Point b)
    {
    p1=a;
    p2=b;}
      

  5.   

    Point类中是否有其他属性(对象属性或类属性),如果有, 上边的p1,p2与下面的就不同,对象不一样了
      

  6.   

    较小的类型可以直接赋值给较大的类型,如 byte i = 8; int j = i; 较大的类型赋值给较小的类型需要强制转换 , 如 int m = 256; byte n = (int)m; 但是此时会损失精度,因为 byte 最多存储 8 位,但是如果 m 不超过 8 位,就不会损失精度。图示如下: 256 : 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ( 32 位) 强制转换成 byte 型只剩 8 位 0 0 0 0 0 0 0 0 就变成了 0 ,随时精度,其它几种数值类型也是如此(包括 char 转换成数值型)。 
      

  7.   

    第一种方式,是利用传进来的参数新建两个对象P1、p2,他们在内存中的地址和实参或者形参的是完全不同的。第二种方式,只是把参数的引用地址赋值给p1 p2,参数和P1 p2都指向相同的地址。
      

  8.   

    我不是高手 但是说一下我的见解:
    Line(Point a,Point b)
    {
    p1=new Point(a.getX(),a.getY());
    p2=new Point(b.getX(),b.getY());}
    这种写法是重新new一个Point对象,对象的应用赋给P,Point对象中的值等于a引用指向对象的值;
    Line(Point a,Point b)
    {
    p1=a;
    p2=b;}
    这种方法是直接将a,b引用付给了p1,p2,也就是说,他们说指向的对象是同一个~~~~