- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的一次面试中,一位面试官问我:
给定一个 Student
类和两个对象 s1
和 s2
:
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/
以下任务在 Vagrant 盒子(ubuntu 12.04 Chefless)上失败 http://opscode.github.io/bento/ - name: ensure database
我是一名优秀的程序员,十分优秀!