根据equals()方法,我有两个相同的对象。有没有办法让它们占用相同的内存地址,这样只有一个对象和几个引用?目标是优化内存消耗。请参阅以下代码:
import java.util.Objects;
public class Test {
int x;
String y;
public static void main(String[] args) {
Test t1 = new Test();
t1.x = 1;
t1.y = "T1";
Test t2 = new Test();
t2.x = 1;
t2.y = "T1";
System.out.println(t1 + "\n" + t2);
if (t1.equals(t2)) {
System.out.println("iguais");
}
else {
System.out.println("diferentes");
}
t1.y = "Novo";
System.out.println(t1 + "\n" + t2);
if (t1.equals(t2)) {
System.out.println("iguais");
}
else {
System.out.println("diferentes");
}
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
Test test = (Test) o;
return x == test.x && Objects.equals(y, test.y);
}
@Override
public int hashCode() {
return Objects.hash(x, y);
}
@Override
public String toString() {
return "Test{" + "x=" + x + ", y='" + y + '\'' + '}';
}
}
在这种情况下,我想使t2与t1相同。 谢谢。
答案 0 :(得分:3)
分配给同一个变量。
if (t1.equals(t2)) {
System.out.println("iguais");
t2 = t1;
}
它会将t2
变量分配给与t1
相同的内存地址。如果没有引用旧的t2
对象,它将在下一个收集周期被垃圾收集器销毁。
答案 1 :(得分:1)
上面的答案已经回答了你的问题。接下来,您可以了解如何实现字符串以节省内存。有关更多信息,请访问:What is String interning?
答案 2 :(得分:0)
只需为t1指定与t2相同的对象。它在代码中看起来像这样:
255 * 4 = 1020