爲什麼我得到10 2030
作爲輸出?我無法弄清楚爲什麼它不輸出爲10 50
?爲什麼我在這個簡單的java代碼中得到這個輸出?
public class Testing1 {
public static void main(String args[]) {
int num1 = 10, num2 = 20, num3 = 30;
System.out.println(num1 + " " + num2 + num3);
爲什麼我得到10 2030
作爲輸出?我無法弄清楚爲什麼它不輸出爲10 50
?爲什麼我在這個簡單的java代碼中得到這個輸出?
public class Testing1 {
public static void main(String args[]) {
int num1 = 10, num2 = 20, num3 = 30;
System.out.println(num1 + " " + num2 + num3);
這是因爲Java使用'優先'來評估表達式。在這種情況下,它從左邊開始,它在右邊,因爲操作都是+
它們都具有相同的優先順序,所以使用從左到右的順序。在第一個'添加'中,您添加一個數字和一個字符串。 Java假定'+'是用來執行字符串連接,並且你得到結果。然後將其添加到20,並獲得(字符串連接)結果"10 20". Finally you add the 30, again adding to a String, so you get the result
「10 2030」。
注意,如果你改變你的操作順序來:
System.out.println(num1+num2+" "+num3);
的num1+num2
將被視爲數字,會做數字此外,給最終的結果:"30 30"
要獲得正確的值,您可以通過使用括號(...)
(其運算符優先級高於'+')創建子表達式來更改評估順序,並獲得結果:
System.out.println(num1 + " " + (num2 + num3));
num2 + num3
首先作爲數字表達式進行評估,然後纔將其作爲字符串表達式的一部分進行合併。
查找運算符優先級,當不同類型的操作數
在java中的「+」操作符不同操作數的操作方式不同如何工作+。
Java表達式的評估基於優先規則。在您的情況下,只有'+'運算符,因此評估是從左到右。
對於整數和字符串操作數java'+'操作符執行字符串連接。
所以NUM1 + 「」 + NUM2 + NUM3執行是
(integer + String) + int + int
(String + int)+ int
String + int
你的期望了放可以用括號強制優先用於(num2 + num3)
來實現。