public class Point{ //点,坐标x,y
private int x,y;
public Point(int x,int y){
this.x=x;
this.y=y;
}
public int GetX(){
return x;
}
public int GetY(){
return y;
}
}
class Line{
private Point p1,p2; //线段的两个端点
Line(Point a,Point b){
p1=new Point(a.GetX(),a.GetY());
//此处为什么不用p1=a?
p2=new Point(b.GetX(),b.GetY());
//次数为什么不用p2=b?
}
public double Length(){ //Body } }注释是书上本来就加了。
就是想问一下为什么不可以?
既然Line()方法的参数是两个对象,用p1=a(p2=b)不就意味着p1和a指向堆中同一个对象么,而形参a和将来方法调用传入的实参也指向堆中同一个对象,为什么要新建一个对象?
private int x,y;
public Point(int x,int y){
this.x=x;
this.y=y;
}
public int GetX(){
return x;
}
public int GetY(){
return y;
}
}
class Line{
private Point p1,p2; //线段的两个端点
Line(Point a,Point b){
p1=new Point(a.GetX(),a.GetY());
//此处为什么不用p1=a?
p2=new Point(b.GetX(),b.GetY());
//次数为什么不用p2=b?
}
public double Length(){ //Body } }注释是书上本来就加了。
就是想问一下为什么不可以?
既然Line()方法的参数是两个对象,用p1=a(p2=b)不就意味着p1和a指向堆中同一个对象么,而形参a和将来方法调用传入的实参也指向堆中同一个对象,为什么要新建一个对象?
解决方案 »
- JavaMail里获取邮件的正文内容是为什么总是得到2次相同的内容
- AOP的内部是怎么实现的?深度讨论内部实现
- 谁知道用java开关钱箱啊?
- 关于JDBC 的问题???????
- jode反编译工具的问题
- 大家帮帮忙!tomcat5的问题,高分相送
- 请教大家推荐几本学java的入门书籍
- <xsl:if test="@type=value "/>其中的"value"是通过页面传递过来的值,应该怎样替换它呢???
- 这个类执行的结果是什么,先考虑再执行,看看是否和你想象的结果的一样?
- 菜鸟的问题
- 那位兄弟知道windows系统自带的扫雷游戏的源代码是用什么语言开发的?
- 再请大虾们指点一下,窗口不能被关闭的问题。
就算每次实例的线的两个端点都一样,但是是多条重叠的线,可是如果你p1=a(p2=b),那就是
只实例化了一条线,就是你所说的堆中的那条线,所以任一引用修改了端点值,其他的引用都变化了,
这应该不是你想要的结果吧~
如果你想做一个操作是这样子的。
Point a = new Point(10, 10);
Point b = new Point(10, 10);
画一条线 Line line = new Line(a, b);
到这里看似很正常,但当你想把b点再移一些距离再画呢?怎么办?
直接设置b? 如下面?
b.setX(20);
Line line1 = new Line(a, b);
到这里看似很正常。但却不是你想要的结果。因为用到b的line中的b对象也被相应的改变了。
也就是说 line 中的参数与 line1 中的参数地址一样。