Java复制对象创建

Java复制对象创建,java,object,memory,duplicates,instance,Java,Object,Memory,Duplicates,Instance,假设我有一个简单的不可变的点类;它包含两个int字段(x和y),一个构造函数和两个getter方法。现在,假设我在应用程序中的某个地方编写以下代码: Point p1 = new Point(1, 2); Point p2 = new Point(1, 2); 我的问题是,在运行代码之后,内存中有多少Point对象?Java只是在内存中创建两个独立(但完全相同)的点实例,还是“聪明”到可以在内存中创建对单个对象的两个引用?最后,如果前者为真,并且创建了两个单独的实例,我的point类是否有办法

假设我有一个简单的不可变的
类;它包含两个
int
字段(
x
y
),一个构造函数和两个getter方法。现在,假设我在应用程序中的某个地方编写以下代码:

Point p1 = new Point(1, 2);
Point p2 = new Point(1, 2);

我的问题是,在运行代码之后,内存中有多少
Point
对象?Java只是在内存中创建两个独立(但完全相同)的
实例,还是“聪明”到可以在内存中创建对单个对象的两个引用?最后,如果前者为真,并且创建了两个单独的实例,我的point类是否有办法确保所有相同的实例都是对内存中同一对象的引用?

Java使用字符串池来节省内存,如果您编写线程以使用它们,则可以使用线程池,但Java在其他方面不会自动汇集引用。如果您创建一个
新字符串(…)
,那么即使是字符串池也会在池中失败。我能看到的唯一解决方案是创建自己的池,并共享一个引用(如果它与已经存在的引用相匹配)。
new
始终创建一个新对象。Java不支持池(除了
String
interning或
Integer
pooling)。如果你想要池,你必须自己创建它。
new
意味着
new
。也许你想要一个大的
集合
充满
对象,还有一个
点工厂
类,如果可能的话,它有一个方法从集合中获取
,或者创建一个新的集合并将其添加到集合。@SteveKuo,还有
Boolean
Character
还有可能
Long
,别忘了。