[英]Type conversion of int and string, java
最后一次考試我們進行了練習以確定以下代碼的輸出:
System.out.println(2 + 3 + ">=" + 1 + 1);
我的答案是5 >= 2
但現在我意識到這是錯誤的答案。 它應該是5 >= 11
。 但為什么?
假設您的語法是:
System.out.println(2 + 3 + ">=" + 1 + 1);
表達式從左到右進行計算,在這種情況下,2 + 3總和為5,當“添加”到字符串結果為"5 >="
時,加到1時給出"5 >= 1"
,再添加1你的結果是: "5 >= 11"
因為向任何事物“添加”字符串會導致連接。 以下是在編譯階段評估它的方式:
((((2 + 3) + ">=") + 1) + 1)
編譯器將執行常量折疊,因此編譯器實際上可以一次減少一個表達式,並替換為常量表達式。 但是,即使它沒有這樣做,運行時路徑實際上也是一樣的。 所以你走了:
((((2 + 3) + ">=") + 1) + 1) // original
(((5 + ">=") + 1) + 1) // step 1: addition (int + int)
(("5>=" + 1) + 1) // step 2: concatenation (int + String)
("5>=1" + 1) // step 3: concatenation (String + int)
"5>=11" // step 4: concatenation (String + int)
您可以通過用括號括起第二個數字加法表達式來強制整數加法。 例如:
System.out.println(2 + 3 + ">=" + 1 + 1); // "5>=11"
System.out.println(2 + 3 + ">=" + (1 + 1)); // "5>=2"
Number+number=number
number+string=string
string+number=string
etc.
它從左到右進行評估。 您將"1"
連接到"5 >="
,最后將"1"
到"5 >= 1"
。
讓我們從左到右一次讀取一個令牌:
遇到的第一個文字是整數, 2
,然后是+
,然后是另一個整數, 3
。 兩個整數之間的A +
是加法,因此將它們加在一起為5
。
現在我們有5
,一個整數,然后是+
,然后是一個字符串">="
。 整數和字符串之間的A +
是連接運算符。 因此,字符串組合形成"5>="
。
然后我們有"5>="
,一個字符串,一個+
,然后是一個整數, 1
。 這又是String連接。 結果是"5>=1"
。
最后我們有"5>=1"
,一個字符串,一個+
,和一個1
。 他的字符串串聯再次出現。 結果是"5>=11"
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.