java - Android 中的 HashSet 空指针异常但在 java 中没有发生。为什么?

标签 java android nullpointerexception null

我在使用哈希集时不知何故遇到了 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/

相关文章:

java - Activity.xml 文件中未解析的类 .MainActivity

java - 销毁应用程序时保留静态成员值是否正常?

android - 如何在我的 HTC Magic 上安装我的安卓应用程序?

mysql - 如何使用注册表单解决空指针异常错误

java - 我不断收到 NullPointerException 但找不到我犯错的地方

java - Postgresql/Java 比较数据库中的用户名和散列密码

java - 在java中创建用于发送邮件ID的新线程

android - 如何使用脚本查询android sqlite数据库

Android相机卡住问题

java - 遇到空指针异常需要第三双眼睛来协助