我在使用哈希集时不知何故遇到了 NPE。我知道 hashset 允许空值。所以我想知道究竟发生了什么,我在 java 中创建了以下代码(仅用于学习目的)
Java 代码 -
public class numbers {
static HashSet<String> s = new HashSet<>();
public static void main(String[] args) {
s.add("a");
s.add(null);
s.add("b");
for(String l:s)
{
System.out.println(l);
}
}
}
它没有给我任何异常(exception)。输出被打印到控制台。然后我尝试在 android 中运行相同的代码
安卓代码-
public class MainActivity extends Activity {
HashSet<String> s = new HashSet<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
s.add("a");
s.add(null);
s.add("b");
for(String l:s)
{
//System.out.println(l);
Log.i("ExceptionCheck", l);
}
}
}
现在当我运行应用程序时。在我尝试读取输出的 Log 语句中引发了空指针异常。
谁能解释一下有什么区别?
最佳答案
您已将 null
添加到您的集合中,然后您正在打印这些值。
您不能将 null
消息传递给任何 Log
打印调用,例如 Log.i()
.它将NPE with message "println needs a message" .
但是,像这样的东西可以确保消息不为空:
Log.i("ExceptionCheck", "" + l);
关于java - Android 中的 HashSet 空指针异常但在 java 中没有发生。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25159785/