簡體   English   中英

為什么char到int轉換工作而不是char到Integer in Java

[英]Why does char to int casting works and not char to Integer in Java

當我遇到這個時,我正在研究一個問題。

(int)input.charAt(i) //works
(Integer)input.charAt(i) // Does not work
// input being a string

我的第一個想法是原語被區別對待,這就是為什么這不起作用。 但后來我發現很難理解為什么他們首先會有一個Integer Wrapper類。

編輯:那么擁有包裝類有什么好處? 它只是因為沒有原始存在而且在設計中更多OO嗎? 我發現很難理解tehy如何有用。 新疑點altogetehr。

你對原語區別對待是正確的。 以下將有效:

(Integer)(int)input.charAt(i);

不同之處在於,當參數為int(Integer)將整數括起來。 它實際上並不是演員,即使它看起來像。 但如果參數是一個char ,那么它將是一個演員; 但是原始元素不能轉換為對象,因此它不起作用。 可以做的是首先將charint - 這個轉換是可以的,因為它們都是原始類型 - 然后int可以被裝箱。

當然, char - > Integer拳擊可能已經成功了。 “為什么不?” 是一個很好的問題。 可能沒有什么用於這樣的功能,特別是當通過稍微更明確地實現相同的功能時。 (應該是char - > Long工作,那么?而char - > Short ?chars是16位,所以這將是最直接的。)

回答編輯:包裝類的優點是包裝的基元可以被視為對象:例如,存儲在List<Integer> List<int>不起作用,因為int不是對象。 那么也許更相關的問題是,在OO語言中做什么是原始的非對象? 答案在於性能:原語更快,內存更少。 用例確定對象的便利性或基元的性能是否更重要。

因為Integer是一個Object 和char不是。 你不能將非Object對象轉換為某個Object。

事實上,您不能將某些Object強制轉換為不在該Object層次結構中的任何其他類Object。

例如你不能這樣做

Integer g = (Integer) s;

其中sString對象。

現在為什么聊天到int工作,因為每個字符在java中都表示為unicode,所以你可以把它想象成后端char是int的較小版本。 (int是32位,char是16位)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM