我在這里很困惑。我有 String ,我已經為它分配了 null 。所以當我連接一個字串 anotherString="abc" 時,它會列印 "nullabc"。但是,如果我嘗試對字符執行相同的操作,如代碼所示,我會得到一個空指標。我想了解它為什么會發生。我是 Java 新手,想了解該語言的細微差別。感謝任何幫助。謝謝!
String nullString=null;
Character nullCharacter=null;
Character character=new Character('k');
Integer nullInteger=null;
System.out.println(nullString "abcdefgh");//prints-"nullabcdefgh"
System.out.println(nullCharacter character);// throws null pointer exception
uj5u.com熱心網友回復:
Character 類是char原始型別的包裝類,它是一個 16 位數字。
如果將兩個原始 char 變數相加,它只是將數值相加。
char a = 'a';
char b = 'b';
char c = (char)(a b); // c == '?'
nullCharacter character由于自動拆箱(在 Java 1.5 中引入),才可能使用 Character 包裝器物件的語法。它將隱式轉換為數字加法:
nullCharacter.charValue() character.charValue() // throws NPE
另一方面,將兩個字串相加nullString "abcdefgh"是在 Java 一開始就引入的字串連接操作,該操作以不同的方式處理空值。理論上它是特定于編譯器的,但大多數編譯器是這樣實作的:
new StringBuilder()
.append(nullString) // implicitly converts null to "null"
.append("abcdefgh")
.toString()
uj5u.com熱心網友回復:
Java 使用自動裝箱(實際上,在本例中為拆箱)將Character物件轉換為char原始物件,但由于nullCharacter為空而失敗。
自動裝箱僅影響包裝原語的類,因此它不適用于String.
如果您將 not-null Character(character在您的代碼中命名)轉換為 a String,您將不會獲得NullPointerException.
System.out.println(character.toString() nullCharacter);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/367115.html
上一篇:使用Python保持每行一致的特定格式的干凈文本檔案
下一篇:加速對長字串中的字符進行迭代
