Android中的HashSet Null Pointer Exception但在java中不会出现。为什么?

时间:2014-08-06 11:55:34

标签: java android nullpointerexception null

我正在使用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语句中引发空指针异常,我试图读取输出。

任何人都可以解释我的差异吗?

2 个答案:

答案 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没有