簡體   English   中英

連接字符串和數字 Java

[英]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 對於以下+也類似。

在第二個表達式中,運算符之一是* ,其優先級高於+ ,因此首先被求值。 你得到的乘法,一個整數, 然后的連接結果Stringint由於+

這將打印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.

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