我正面临着写一段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错误的原因。我对面试官说,处理一种强有力的语言只是我的习惯。但他似乎并不满意。
答案 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 和更干净的代码进行操作,那么您应该使用它,因为这会使您的代码更具可读性并且不易错误。