簡體   English   中英

為什么不能在某些情況下添加int和char?

[英]Why can't you add an int and a char in some cases?

為什么

char ch = '4';
ch = '4' + 2;

工作,但是

char ch = '4';
ch = ch  + 2;

不?

為了理解這一點,讓我們考慮編譯器在兩個可能性的每個步驟中所做的事情。 讓我們開始:

ch = '4' + 2;

編譯器將'4'轉換為int。 所以它變成了

ch = 52 + 2;

然后編譯器變成了什么

ch = 54;

ch是一個char,允許編譯器將54轉換為char,因為它可以證明轉換沒有丟失。

現在讓我們考慮第二個版本:

ch = ch  + 2;

ch在編譯時沒有已知值。 這就變成了

ch = ((int) ch) + 2;

現在編譯器無法證明這個(int)的結果可以存儲在char的范圍內。 所以它不會自動縮小它,並將其報告為錯誤。

EDIT1:

如果編譯器可以證明變量永遠不會改變,並且是可內聯的。 然后第二種形式可以變成第一種形式。 Subir指出,添加'final'使這成為可能。 雖然如果編譯器要執行更改分析,那么它在技術上能夠在沒有final關鍵字的情況下解決這個問題,但是final確實使編譯器和代碼的讀者更容易。

EDIT2:

Java語言規范中涵蓋了將int縮小為char,該鏈接由Jon Skeet友情提供。

暫無
暫無

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

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