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

Gau*_*tam 1 java null android nullpointerexception

我正在使用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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

它没有给我任何例外.输出将打印到控制台.然后我试着在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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我运行应用程序.在Log语句中引发空指针异常,我试图读取输出.

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

laa*_*lto 5

您已null在组中添加了一个,然后打印了值.

您无法将null消息传递给任何Log打印调用,例如Log.i().它将NPE与消息"println需要一条消息".

但是,这样的工作可以确保消息不为null:

Log.i("ExceptionCheck", "" + l);
Run Code Online (Sandbox Code Playgroud)