在java中的不同位置是否可以创建完全相同的对象?

在java中的不同位置是否可以创建完全相同的对象?,java,Java,同一个对象在不同的位置创建时会发生什么情况。第一个对象在类内但在方法外,第二个对象在同一类的方法内..可能吗。。??代码很好,但在运行时会出现一些异常,如:assert 是的,上述代码有效,在中创建了两个不同的对象 记忆 也正如@s所建议的ᴜʀᴇsʜᴀᴛᴛᴀ , 由于在顶层创建对象,它会生成java.lang.StackOverflowerError 如果在不同的位置创建相同的对象,会发生什么情况 创建2个对象。如果需要,您可能无法创建N个这样的对象 第一个在类内部但在方法外部,第二个在同一类的

同一个对象在不同的位置创建时会发生什么情况。第一个对象在类内但在方法外,第二个对象在同一类的方法内..可能吗。。??代码很好,但在运行时会出现一些异常,如:
assert

是的,上述代码有效,在中创建了两个不同的对象 记忆

也正如@s所建议的ᴜʀᴇsʜᴀᴛᴛᴀ , 由于在顶层创建对象,它会生成
java.lang.StackOverflowerError

如果在不同的位置创建相同的对象,会发生什么情况

创建2个对象。如果需要,您可能无法创建N个这样的对象

第一个在类内部但在方法外部,第二个在同一类的方法内部。可能吗

顶部的一个充当
Test
类的实例成员,您在方法内部创建的一个实例成员是该方法的本地成员

代码很好,但在运行时会出现一些异常,如:在测试时

这就是堆栈溢出错误。您正试图在顶层的测试类中创建测试对象,因此构造函数将继续在递归中调用,从而导致错误

class Test{
   Test d = new Test();  // instance object

   public static void main(String[] args) {
    Test d1 = new Test(); // local to this method
    System.out.println(d1);
  }
}
线程“main”java.lang.StackOverflower中出现异常 测试时。(Test.java:2)
您正在递归地创建
测试的新实例,直到内存不足

让我们一步一步来看看:

main
方法中,您有:

Exception in thread "main" java.lang.StackOverflowError
    at Test.<init>(Test.java:2)
这将创建一个新实例
Test
,因此在初始化
Test
时,您将创建一个新变量:

 Test d1 = new Test();
因此,将创建新对象,但与之前相同,您将再次创建
Test
的新实例,这将再次创建
Test
的新实例:

Test d = new Test();

这将无限期地发生,直到内存耗尽。

它不是同一个对象。
d!=d1
所以它们是不同的对象。是的,您将在
堆栈溢出错误中结束
Test d = new Test();
Test d = new Test();