在以下代码的任何情况下都可以抛出NullPointerException吗?
比如说我们有类testFunction
的函数myClass
声明一个变量并返回它而不首先初始化它:
public static String testFunction()
{
String s1
return s1
}
然后我们使用以下代码将返回值与String进行比较:
String myString = myClass.testFunction();
if(myString == "test")
{
system.out.println("Print A")
}
else
{
system.out.println("Print B")
}
我认为它总会印刷"打印B"除非函数实际返回" test"然后它将打印"打印A"。这是正确的吗?
答案 0 :(得分:2)
不,正如您所写,它无法产生NPE(出于多种原因)。
public static String testFunction()
{
String s1;
return s1;
}
这将导致编译器错误,因为s1
尚未初始化。我在您的代码示例中添加了分号以使其在语法上有效。
if(myString == "test")
这不会产生NPE。但是,它也不是比较字符串的正确方法。查看两个String对象是否是相同字符序列的正确方法是firstString.equals(secondString)
,如果firstString
为空,则可以生成NPE。
将String文字与可能为null的变量进行比较时,常见的习惯用法是首先放置String文字,因为它是一个已知的非空对象,如下所示:
"test".equals(myString);
这永远不会产生NPE。