[英]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
,那么它將是一個演員; 但是原始元素不能轉換為對象,因此它不起作用。 你可以做的是首先將char
為int
- 這個轉換是可以的,因為它們都是原始類型 - 然后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;
其中s
是String
對象。
現在為什么聊天到int工作,因為每個字符在java中都表示為unicode,所以你可以把它想象成后端char是int的較小版本。 (int是32位,char是16位)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.