gpt4 book ai didi

java - 如何更改 Student 类,以便当 s1 = new Student() 且 s2 = new Student() 时 s1 == s2 返回 true?

转载 作者:行者123 更新时间:2023-12-02 07:31:46 25 4
gpt4 key购买 nike

在我的一次面试中,一位面试官问我:

给定一个 Student 类和两个对象 s1s2:

s1 = new Student();
s2 = new Student();

s1 == s2 如何返回 true

我告诉他让 Student 类成为单例,但他说不,我们必须在类级别进行更改,以便 s1 == s2将返回true

注意:我们需要更改 Student 类。请不要回复s1=s2。有什么线索吗?

最佳答案

运算符==检查两个对象是否相同。您创建了两个不同的 equals 对象。所以它们不一样,s1 == s2 将返回 false。您必须重新定义方法 equals 并使用此方法检查它们,如下所示:

s1.equals(s2)

方法equals :

Indicates whether some other object is "equal to" this one.

请注意,当您重新定义方法 equals 时,您还需要重新定义方法 hashCode,如 equals 方法的描述中明确记录的那样:

Note that it is generally necessary to override the hashCode method whenever this method is overridden, so as to maintain the general contract for the hashCode method, which states that equal objects must have equal hash codes.

通常 ide(如 IntelliJ、Eclipse 或 Netbeans)可以帮助您编写这两种方法的良好实现。

考虑到这一点,我认为面试官在谈论它时问了诸如s1如何等于s2之类的问题,而你将其误解为s1(简单等于)s2如何。或者他已经在纸上明确写下了运算符==

<小时/>

如果面试官明确询问如何做

s1 == s2 // returns true

创建两个对象后

Student s1 = new Student();
Student s2 = new Student();

唯一的可能性是更改 s1(或 s2)的引用,如下所示:

Student s1 = new Student();
Student s2 = new Student();

s1 = s2; // new added line , or the same if you write s2 == s1

s1 == s2 // now is true

但这是一个技巧,事实上您正在测试两个不同的变量引用同一个对象。

您可以对两个变量 null 或之前创建的另一个 Student 进行类似的分配。基本上,对将 s2 的相同引用分配给 s1 的代码进行的任何更改都将起作用。

关于java - 如何更改 Student 类,以便当 s1 = new Student() 且 s2 = new Student() 时 s1 == s2 返回 true?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50625203/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com