任何空指针异常的机会?

时间:2017-08-07 17:21:45

标签: java string nullpointerexception

在以下代码的任何情况下都可以抛出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"。这是正确的吗?

1 个答案:

答案 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。