" Foo" .equals(maybeFoo)和maybeFoo == null之间的区别是什么?false:maybeFoo.equals(" Foo")?

时间:2016-05-22 16:39:21

标签: java equals strong-typing

我正面临着写一段java代码的问题:

boolean isFoo(String maybeFoo){
    //Return true if maybeFoo is equal to "Foo"
    //Don't throw any exceptions.
}

我有两个选择:

1. return "Foo".equals(maybeFoo);
2. return maybeFoo==null?false:maybeFoo.equals("Foo");

我选择数字1,但我不能说出数字2错误的原因。我对面试官说,处理一种强有力的语言只是我的习惯。但他似乎并不满意。

2 个答案:

答案 0 :(得分:1)

这些之间的区别正是您在2个选项中所写的内容

"Foo".equals(maybeFoo);

这是最常见的实施检查,因为您不必关注空检查...(即使因为只检查一次)

另一方面,这个

maybeFoo.equals("Foo") 

只会因为在空引用对象上调用方法而抛出NPE异常

答案 1 :(得分:1)

首先应该说两个版本都提供相同的输出,但没有一个会抛出异常,所以只需要一个更清晰的方式来编写它。

set url=%1  
start chrome %url% 

是执行指定操作的更好方法,因为即使return "Foo".equals(maybeFoo); 为null,java函数maybeFoo也会返回equals并且不会抛出异常。

但是,如果false为空,则无法在其上调用函数maybeFoo,否则您将获得equals。因此,您必须在第二个示例中检查它。

关键在于,如果您可以使用 less 更干净的代码进行操作,那么您应该使用它,因为这会使您的代码更具可读性并且不易错误。