2016-11-18 60 views
0

我知道MongoDB字段名稱區分大小寫,至少在爲字段檢索值時。我有以下Java程序。從MongoDB檢索'int'字段文檔拋出NullPointerException

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 = 「飛機」 和S2 =空。但是第二個Sysout沒有顯示任何東西,因爲剛剛在它上面的那一行發生了NullPointerException,我無法理解。

任何人都可以解釋邏輯嗎?

+1

Autounboxing。如果字段「Int」缺失,那麼在int中會發生什麼? – chrylis

+0

@chrylis,如圖所示我的文檔在字段'int'中保存值20。 – RLD

+0

是的,沒有在字段'Int'中。 – chrylis

回答

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(在您的文檔中不存在)。然後,您正嘗試在int原始內存儲null。所以你會有一個例外。

你需要做的是:

Integer i2 = doc.getInteger("Int"); 

這將防止異常被拋出,並允許i2=null;

+0

謝謝@ user123。這對於正確的解釋應該是可以接受的答案。似乎是新用戶,即使我投票也不會考慮我的投票。 – RLD

相關問題