我知道 MongoDB 字段名称区分大小写,至少在检索字段的值时。我有以下Java程序。
public class SimpleDocument {
public static void main(String[] args) {
Document doc = new Document("String","Aeroplane").append("int", 20);
String s1 = doc.getString("String");
String s2 = doc.getString("string");
System.out.println("s1="+s1+" and s2="+s2);
int i1 = doc.getInteger("int");
int i2 = doc.getInteger("Int"); //throws NullPointerException
System.out.println("i1="+i1+" and i2="+i2);
}
}
第一个Sysout按预期显示输出,即 s1 =“Airplane”和 s2 = null 。但是第二个Sysout没有显示任何内容,因为它上方的行引发了一个我无法理解的 NullPointerException 。
有人可以解释这个逻辑吗?
答案 0 :(得分:1)
Document doc = new Document("String","Aeroplane").append("int", 20);
String s1 = doc.getString("String");
String s2 = doc.getString("string");
System.out.println("s1="+s1+" and s2="+s2);
int i1 = doc.getInteger("int");
int i2 = doc.getInteger("Int"); //throws NullPointerException
System.out.println("i1="+i1+" and i2="+i2);
对于s1
,您正在"String"
中阅读,其等于"Aeroplane"
。
s1="Aeroplane";
对于s2
,您正在阅读"string"
,其等于null
(您的文档中不存在)。字符串是对象,不是原始数据类型,因此它们能够在其中存储null
。
s2=null;
对于i1
,您正在阅读"int"
,其等于20
i1=20;
对于i2
,您正在阅读"Int"
,其等于null
(您的文档中不存在)。然后,您尝试将null
存储在int
原语中。所以你会有例外。
您需要做的是:
Integer i2 = doc.getInteger("Int");
这样可以防止抛出异常,并允许i2=null;