[英]concatenating string and numbers Java
為什么 output 在這些情況下有所不同?
int x=20,y=10;
System.out.println("printing: " + x + y);
==>印刷:2010
System.out.println("printing: " + x * y);
==>打印:200
為什么第一個 output 不是 30? 它與運算符優先級有關嗎? 就像第一個“打印”和 x 被連接,然后這個結果字符串和 y 被連接? 我對么?
它是BODMAS
規則
我在下面顯示從高到低的優先順序:
B - Bracket
O - Power
DM - Division and Multiplication
AS - Addition and Substraction
該作品由 Left to Right
如果運營商是相同的優先級的
現在
System.out.println("printing: " + x + y);
"printing: "
:是字符串”
"+"
:是Java中唯一將數字連接到字符串的重載運算符。 因為我們這里有2個“ +”運算符,並且x + y落在"printing:" +
正如已經發生的那樣,它也將x和y視為字符串。
因此輸出為2010。
System.out.println("printing: " + x * y);
在這里
"*"
:優先級高於+
因此,它的x*y
首先 printing: +
所以輸出是200
如果要在第一種情況下將200作為輸出,請執行以下操作:
System.out.println("printing: "+ (x+y));
Bracket
的優先級 高於 Addition
。
基本數學告訴您,每次都進行加法運算。
因此, "printing: " + x
是首先計算的。 因為它是string + int
,結果為"printing: 20"
。 然后添加y
因此"printing: 20" + y
等於"printing: 2010"
。
在第二種情況下,乘法是優先的。 因此,首先計算x * y
等於200
。 然后"printing: " + 200
等於"printing: 200"
。
您觀察到的結果當然與運算符優先級以及評估順序有關 。 在沒有其他規則(即優先級較高的運算符)的情況下,將按從左到右的順序評估運算符。
在第一個表達式中,所有運算符具有相同的優先級,因為它們是相同的運算符: +
,因此對第一個運算進行求值。 由於它涉及String
,因此它是String
串聯,結果是String
; 對於以下+
也類似。
在第二個表達式中,運算符之一是*
,其優先級高於+
,因此首先被求值。 你得到的乘法,一個整數, 然后的連接結果String
和int
由於+
。
這將打印30
:
System.out.println("printing: " + (x + y))
您需要括號來表達您想要的優先級。
用於操作員優先
System.out.println("printing: " + x * y);
這里*運算符的優先級比+高,因此首先計算x * y
。
System.out.println("printing: " + x + y);
這里所有都是相同的運算符,並且由於存在一個string
值,因此它將被視為字符串連接操作。
如果您將括號包含在其中-System.out.println(“ printing:” +(x + y));
然后括號(運算符的優先級比+高,因此首先將計算(x + y)
並輸出30
在第一行打印中,首先在String和int之間應用+運算符,結果是一個String,該字符串再次與另一個int串聯在一起,生成一個String。
在第二行中,運算的順序為:首先是乘法,結果int連接到String。
System.out.println("2*("+a"+"+b"*"+c")")
如何打印
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.