亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

int和char之間的Java隱式轉換

int和char之間的Java隱式轉換

皈依舞 2022-05-25 10:16:52
在處理以下場景時,我正在尋找對 Java 行為的解釋。我了解 ASCII 表的排列方式使字符的值5比0. 這允許在 char 上完成計算,而無需轉換為第一個示例中看到的 int。我不明白為什么 Java 似乎不一致地處理何時提供 ASCII 表中的值以及何時對字符進行計算,就好像它們是整數一樣。int x = '5' - '0';輸出x = 5;int x = '5'輸出x = 53;現在舉一些例子,這會引起混亂。int x = '0' + 1 - '5'輸出x = -4int y = '5' - '0' + '1'輸出54int y = '5' - 0 + '1'輸出102Java 似乎在進行隱式類型轉換,但是 Java 是如何推斷它應該使用 int/char 的哪種表示形式的呢?
查看完整描述

3 回答

?
蕪湖不蕪

TA貢獻1796條經驗 獲得超7個贊

只需將 char 轉換為 ASCII 代碼(在您的語句下方)


int x = '0' + 1 - '5'

        48  + 1 - 53 = -4 


int y = '5' - 0 + '1'

         53 - 0 + 49 = 102


int y = '5' - '0' + '1'

         53 - 48  + 49 = 54

注意它是一致的,每個 int 保持 int 并且每個 char 都轉換為 ASCII 碼


查看完整回答
反對 回復 2022-05-25
?
qq_遁去的一_1

TA貢獻1725條經驗 獲得超8個贊

char '0'不等于int 0。char '0'的二進制表示占用 16 位:

0000 0000 0011 0000

whileint 0的二進制表示占用 32 位:

0000 0000 0000 0000 0000 0000 0000 0000

當您將 achar和 an相加時int,char將提升為int第一個。

例如。char5unicode0035,在 binary 中0000 0000 0011 0101,它會通過在頭部插入 16 個零來提升為 int 0000 0000 0000 0000 0000 0000 0011 0101,而 int53用十進制表示。


查看完整回答
反對 回復 2022-05-25
?
慕容708150

TA貢獻1831條經驗 獲得超4個贊

您可能正在混合值中的表示。這些值永遠不會改變,因此當您執行算術運算時,它將始終是 '5'==53 而不是 5。對于在原語到字符串轉換上顯示 JLS。


對于大多數計算,整數算術被提升為 int。


System.out.println('5' + '0');

>>> 101


System.out.println((char)('5' + '0'));

>>> e

兩個結果具有相同的數值,但其中一個顯示為字符,因為它已轉換為字符。


查看完整回答
反對 回復 2022-05-25
  • 3 回答
  • 0 關注
  • 153 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號