我正在使用hashsets,不知怎的,我遇到了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);
}
}
}
它没有给我任何例外。输出将打印到控制台。然后我试着在android
中运行相同的代码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语句中引发空指针异常,我试图读取输出。
任何人都可以解释我的差异吗?
答案 0 :(得分:5)
您已在集合中添加null
,然后打印值。
您无法将null
邮件传递给任何Log
打印电话,例如Log.i()
。它将NPE with message "println needs a message"。
但是,这样的工作可以确保消息不为空:
Log.i("ExceptionCheck", "" + l);
答案 1 :(得分:4)
那是因为s.add(null);
行
Console
允许null
值,但Logcat没有