簡體   English   中英

類型轉換為int和string,java

[英]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.

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