這是如何編譯沒有錯誤?根據我的理解,編譯器檢查變量的類型(在本例中爲String
),然後查看右側表達式的類型是否與變量的類型相對應(或者至少是一個子類型,但讓我們堅持簡單的情況,因爲它是最終的,所以String
類)。爲什麼變量初始化到賦值表達式[String x =(x = y)]編譯?
public class InitClass {
public static void main(String[] args) {
String str = (str = "hello");
System.out.println(str);
}
}
我的問題是如何編譯str = "hello"
?編譯器是否已經知道str
應該是String
?
(str =「hello」)返回字符串「hello」。 Eclipse不鼓勵它的消息:「賦值給變量str沒有任何效果」 – LeTex
@LeTex我通常會將Eclipse設置得更嚴格,並將它們報告爲錯誤而不是警告。即使JLS允許任何人使用這些結構,我也沒有理由這樣做。 – biziclop
這是一個有趣的問題,你可能會想「誰在寫這樣的代碼,爲什麼」。純粹學術,當然? – TEK