爲了改進ESAPI的編碼方法來處理非BMP字符,我遇到了意想不到的行爲。這是有趣的,至少可以說...爲什麼char不能自動裝箱到Java中的字符?
這個單元測試:
public void testCSSEncodeChar0x100()
{
char in = 0x100;
String inStr = Character.toString(in);
String expected = "\\100 ";
String result;
result = cssCodec.encodeCharacter(EMPTY_CHAR_ARRAY, in);
// this should be escaped
assertFalse(inStr.equals(result));
assertEquals(expected,result);
}
我曾在我的腦海裏 - 只有一個目標方法。我有兩種方法:
@Override
public String encodeCharacter(char[] immune, Character c) {
return ""+c;
}
@Override
public String encodeCharacter(char[] immune, int codePoint) {
return new StringBuilder().appendCodePoint(codePoint).toString();
}
我本來期望的Java的變量in
autobox到Character
,而是它上溯造型得到了一個int
並最終調用第二種方法。
Tried Google,在這個非直觀的行爲上沒有得到任何答案。
至於什麼工作,只需更改in
的類型從char
到Character
解決了這個問題。
向後兼容性 - 當他們加入自動裝箱,他們無法改變依賴於自動裝箱不會發生的舊代碼的含義。這裏有一個地方有一個地方。 – user2357112