Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对同一对象的多个引用_Java - Fatal编程技术网

Java 对同一对象的多个引用

Java 对同一对象的多个引用,java,Java,有人能解释为什么第四条语句没有打印90,90吗? 第四行打印23,23。当点对象发生更改时,它也应该更改矩形对象,但不会更改 我指的是下面的URL,上面说对象可以有多个引用。为什么矩形同时引用同一个对象时不更改 请注意,因为正如您所写,这些都不是对同一对象的引用 Rectangle rect=新矩形(原点) 您从一个点对象创建了一个新的矩形,因此在运行时执行中有两个对象:一个矩形和一个点 您可以将new关键字视为数据从一个对象到另一个对象的简单复制粘贴,但不会进行深度链接(除非您在实现中强制执行

有人能解释为什么第四条语句没有打印90,90吗? 第四行打印23,23。当点对象发生更改时,它也应该更改矩形对象,但不会更改

我指的是下面的URL,上面说对象可以有多个引用。为什么矩形同时引用同一个对象时不更改


请注意

,因为正如您所写,这些都不是对同一对象的引用

Rectangle rect=新矩形(原点)

您从一个
对象创建了一个新的
矩形
,因此在运行时执行中有两个对象:一个矩形和一个点


您可以将
new
关键字视为数据从一个对象到另一个对象的简单复制粘贴,但不会进行深度链接(除非您在实现中强制执行)

,因为正如您所写的那样,这些链接不是对同一对象的引用

Rectangle rect=新矩形(原点)

您从一个
对象创建了一个新的
矩形
,因此在运行时执行中有两个对象:一个矩形和一个点


您可以将
new
关键字视为数据从一个对象到另一个对象的简单复制粘贴,但不会进行深度链接(除非您强制实现)

您的前提是错误的。这些都不是对同一对象的两个引用(一个是
,另一个是
矩形
),也不是
矩形
的引用

这是构造函数的代码(假设
java.awt.Rectangle
):

也就是说,矩形从点解压坐标,并且不保留对原始点的其他引用,因此当点发生更改时,矩形不会更改



话虽如此,您在问题中链接到的教程中使用的确实包含对
点的引用,因此,如果该点发生更改,将更新其原点位置。因此,我猜您在学习本教程时遗漏了该部分,并使用了错误的(内置)矩形类。

您的前提是错误的。这些都不是对同一对象的两个引用(一个是
,另一个是
矩形
),也不是
矩形
的引用

这是构造函数的代码(假设
java.awt.Rectangle
):

也就是说,矩形从点解压坐标,并且不保留对原始点的其他引用,因此当点发生更改时,矩形不会更改



话虽如此,您在问题中链接到的教程中使用的确实包含对
点的引用,因此,如果该点发生更改,将更新其原点位置。因此,我猜您在学习本教程时错过了这一部分,使用了错误的(内置的)
Rectangle
类。

因为这些不是对同一对象的多个引用。简单的技巧:在Java中,如果前面有一个
new
,它肯定会创建一个新对象。向我们展示
Rectangle
构造函数。我很确定它是一个副本,而不仅仅是引用源对象。如果您包含代码中的
矩形
类(带包的完整限定名),这将非常有帮助。我猜这些是
java.awt
类。在中,如果您查看您使用的
java.awt.Rectangle
构造函数的代码,您将看到构造函数从提供的
复制x/y值,但没有保存对该点本身的引用。我意识到了我的错误…谢谢大家。你们很快…谢谢,因为它们不是对同一个对象的多个引用。简单的技巧:在Java中,如果前面有一个
new
,它肯定会创建一个新对象。给我们看
Rectangle
构造函数。我很确定它是一个副本,而不仅仅是引用源对象。如果您包含代码中的
矩形
类(带包的完整限定名),这将非常有帮助。我猜这些是
java.awt
类。在中,如果您查看您使用的
java.awt.Rectangle
构造函数的代码,您将看到构造函数从提供的
复制x/y值,但没有保存对该点本身的引用。我意识到了我的错误…谢谢大家。你们都很快…谢谢我认为问题是“为什么
矩形
没有保留对
点的引用”@kaya3我同意这可能是OP被混淆的原因,但我认为这两个答案都解决了OP可能被混淆的有效点。我的意思是,我认为OP不认为
矩形
是同一个对象。@kaya3我想你很困惑,我不是写这两个答案的人,我是第三方。我错了,评论中的小字体对我来说不是最好的。是的,我不认为我们不同意。我认为问题是“为什么
矩形
不保留对
”的引用@kaya3我同意这可能是OP混淆的原因,但我认为两个答案都解决了OP可能混淆的有效点。我的意思是,我认为OP不认为
矩形
是同一个对象。@kaya3我想你很困惑,我不是写这两个答案的人,我是第三方。我错了,评论中的小字体对我来说不是最好的。是的,我不认为我们不同意。
Point origin = new Point(23,23);
        Rectangle rect = new Rectangle(origin);

        1) System.out.println(origin.getX()+" "+origin.getY());
        2) System.out.println(rect.getX()+" "+rect.getY());

        System.out.println("----------------------");

        origin.setLocation(90, 90);

        3) System.out.println(origin.getX()+" "+origin.getY());
        4) System.out.println(rect.getX()+" "+rect.getY());
public Rectangle(Point p) {
    this(p.x, p.y, 0, 0);
}