首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何更改学生类,使s1 == s2在s1 =新学生()和s2 =新学生()时返回true?

如何更改学生类,使s1 == s2在s1 =新学生()和s2 =新学生()时返回true?
EN

Stack Overflow用户
提问于 2018-05-31 21:13:08
回答 3查看 470关注 0票数 2

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

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

代码语言:javascript
复制
s1 = new Student();
s2 = new Student();

s1 == s2将如何返回true

我告诉他让Student类成为单例,但他拒绝了,我们必须改变类的级别,这样s1 == s2才能返回true

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-01 03:10:21

这是一种技巧,但将满足要求:

更改Student构造函数以抛出一些异常(我选择了一个未检查的异常,因此不必在throws子句中指定它):

代码语言:javascript
复制
public Student()
{
    throw new NullPointerException();
}

现在,假设我们被允许添加try-catch块:

代码语言:javascript
复制
Student s1 = null;
Student s2 = null;
try {
    s1 = new Student(); 
    s2 = new Student();
}
catch (Exception e) {
}
System.out.println (s1==s2);

这将打印true,因为s1s2都是null

即使我们没有捕获到异常,在两次构造函数调用之后(实际上是在第一次构造函数调用之后,因为第二次调用永远不会被执行),s1 == s2仍然是真的,但是我们必须在某个地方捕获异常以便对其进行测试。

票数 3
EN

Stack Overflow用户

发布于 2018-05-31 21:27:14

我看到的唯一合乎逻辑的解决方案是琐碎的:

代码语言:javascript
复制
s1 = new Student();
s2 = new Student();
s1=null;
s2=null;
System.out.println(s1==s2);

或者:

代码语言:javascript
复制
s1 = new Student();
s2 = new Student();
s1=s2;
System.out.println(s1==s2);

或者:

代码语言:javascript
复制
s1 = new Student();
s2 = new Student();
s2=s1;
System.out.println(s1==s2);

正如@user7在评论中所建议的那样

票数 1
EN

Stack Overflow用户

发布于 2018-05-31 21:22:47

当==运算符比较对象引用时,我认为s1和s2必须为空。

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50625203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档