据我所知,尝试将某个对象的值与某些东西进行比较会导致NullPointerException,例如,
String bob;
if(bob.equals("blahblahblah")){do_something();}
并且使用嵌套检查是个好主意:
if(!bob.equals(null)){
if bob.equals("blah blah blah"){
do_something();
}
}
但是如果我还没有给出任何值,那么当我运行上述说法bob还没有被初始化时,我会收到错误 - 因为我将bob与null进行比较,我应该是能够毫无问题地运行它,不应该吗?
感谢。
答案 0 :(得分:3)
如果bob为null,则无法执行bob.equals - 您需要检查
if (bob != null)
像这样
if (bob != null) {
if (bob.equals("blah blah blah")){
do_something();
}
}
解决问题的好方法是
if ("blah blah blah".equals(bob)) {
}
答案 1 :(得分:2)
!bob.equals(null)
您正在尝试在null对象上调用方法,因此您将收到错误。试试这个:
bob != null
答案 2 :(得分:2)
想象一下写作
null.equals(null)
您希望它有效吗?出于同样的原因,这不起作用。如其他所述,您可以使用引用比较(==),因为只有1个空。
答案 3 :(得分:1)
您的bob
为null
,您无法致电equal()
,无论是将您的计划更改为
if(bob != null){
if bob.equals("blah blah blah"){
do_something();
}
}
OR
初始化bob,如String bob = new String("some string");
答案 4 :(得分:1)
正如Shreyos指出的那样,你永远不会初始化bob
所以你得到了NPE。您可以使用Yoda Conditions:
if("blahblahblah".equals(bob)){do_something();}
您的字符串文字永远不能为空,因此当equals()
实际上为空时,false
比较将返回bob
。许多人对使用这种技术嗤之以鼻,但在许多情况下它们都很方便。
答案 5 :(得分:0)
你的问题是:
if(!bob.equals(null)){
if bob.equals("blah blah blah"){
do_something();
}
}
假设您使用String bob;
声明了这一点。编译器会将其默认为String bob = null;
null是一个指针(引用)本身。方法String.equals()
是String类中引用的方法。由于您没有创建类型为String
的对象,因此该类不存在,因此该方法也不存在。
如果您要测试某些内容是否为null(就像您最终编写生产代码时那样),那么您将使用这样的equals运算符:
if( null != bob ){
//operations on bob
}
额外细节:
现在初始化是这样的,当你说出类似的东西时:
String bob = "foo";
编译器实际上会编写类似String bob = new String(foo);
这应该告诉你,初始化意味着对象的创建。
我说“类似”,因为以下内容也是可能的:
String bob = "foo" + "bar";
编译器将编写
String bob = new StringBuilder("foo").append("bar").toString();