为啥在 equals 方法中必须有 2 个 return 语句
Posted
技术标签:
【中文标题】为啥在 equals 方法中必须有 2 个 return 语句【英文标题】:Why 2 return statements are mandatory in equals method为什么在 equals 方法中必须有 2 个 return 语句 【发布时间】:2014-08-06 06:54:23 【问题描述】:public class MyStuff
String name;
MyStuff(String n)
name = n;
public static void main(String[] args)
MyStuff m1 = new MyStuff("guitar");
MyStuff m2 = new MyStuff("tv");
System.out.println(m2.equals(m1));
public boolean equals(Object o)
MyStuff m = (MyStuff) o;
if (m.name != null)
return true;
return false;
当我删除其中一个返回语句时,编译器给出错误:此方法必须返回布尔类型的结果
【问题讨论】:
修复缩进会有所帮助。 return true 是一个 CONDITIONAL return,由上面的if(m.name != null)
语句定义。
如果你使用java,使用
作为if子句!
if 不需要花括号。但是,如果您不使用它们,则在 if 语句中只考虑下一行。
省略 可能会导致以后出现许多错误。我在编辑别人的代码时遇到过很多次。始终使用括号。
我认为这是个好问题。他是一个新手,现在他可能是一个更好的新手。
【参考方案1】:
return true
仅在if
条件为真时执行。对于所有其他情况,您需要return false
【讨论】:
【参考方案2】:这很明显,因为您的代码实际上是
....
MyStuff m = (MyStuff) o;
if(m.name != null)
return true;
return false;
请使用括号,并在项目 -> 属性 -> Java 代码样式 -> 格式化程序 -> 配置工作区设置 -> 新建 -> 制作一个实际上很好的配置文件 -> 应用 -> 按 Ctrl+ 设置 Eclipse 格式化程序代码中的 Shift+F。
其实我个人推荐Eclipse下面的Formatter设置,就是我用的那个:https://dl.dropboxusercontent.com/u/4363931/BestEclipseFormatterSettings.xml
【讨论】:
【参考方案3】:如果你的情况真的这么简单,那么只返回比较结果会简单得多:
return m.name != null;
进行布尔比较然后单独使用 if 块返回结果确实没有任何价值。
【讨论】:
【参考方案4】:如果只使用一个 return 语句,则 equals() 将仅在 m.name!=null 时返回结果,否则该方法没有任何其他 return 语句。所以编译器给出了错误。
【讨论】:
以上是关于为啥在 equals 方法中必须有 2 个 return 语句的主要内容,如果未能解决你的问题,请参考以下文章
java中重写Object类的equals方法为啥要重写hashcode方法?不重写可以吗?
JAVA中,为啥object对象中的equals方法比较的是同一,而String对象比较的是相等?
为啥在使用带有 next() 和 nextLine() 的 Scanner 读取 2 个看似相同的字符串时得到 equals() == false?