类的两个对象是否指向相同的内存位置?

Ano*_*384 6 java memory garbage

我开始学习一些Java,我已经阅读了很多关于如何通过JVM分配内存以及因此如何使用垃圾收集器释放内存的方法.

我无法找到的一件事是,如果我创建两个完全相同的新对象,它们会引用内存中的相同位置?与String Pool的工作方式类似.

CKi*_*ing 8

我无法找到的一件事是,如果我创建两个完全相同的新对象,它们会引用内存中的相同位置?与String Pool的工作方式类似

答案是否定的:

  1. 如果使用new关键字创建两个对象,它们将永远不会指向相同的内存位置.
  2. 这也适用于String对象.如果String使用创建两个对象new,则对这些对象的两个引用将指向两个不同的内存位置.
  3. String文字是一个特例.一个String文字存储在String文字池.因此String,对String文字的两个引用将始终指向相同的内存位置.
  4. Java中还有其他特殊情况,例如Integer类.例如,Integer a = 100; Integer b = 100; System.out.println(a==b);这打印为true,因为IntegerJVM缓存了介于-128和127之间的值.(-128到127之间的值由所有JVM实现缓存.这是高达单个JVM实现缓存值超出此范围)

  • `(就我的知识而言,JVM缓存的值的范围没有明确指定)`正确,唯一指定的是-128和127**之间的范围必须被缓存,但超出该范围这取决于实施.因此,在Oracle VM(以及可能还有其他人)中,您可以通过参数`-XX:AutoBoxCacheMax更改此范围. (4认同)