如果equals方法返回true,我如何在内存中分配相同的空间?

时间:2018-04-05 13:28:06

标签: java memory memory-management

根据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相同。 谢谢。

3 个答案:

答案 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