簡體   English   中英

關於 java 中帶有 System.out.print 的運算符的問題

[英]question about operator in java with System.out.print

誰能告訴我區別和為什么??????? 我有一個例子:

int a = 2;
int b = 7;
System.out.println(a+b);
System.out.println(a+b+"String");
System.out.println("String"+a+b+"String");
System.out.println(a+b+"String"+a+b+"String");
System.out.println("String"+a+b+"String"+a+b);

output

9
9String
String27String
9String27String
String27String27

要了解發生了什么,請考慮 Java 中的這些表達式是左關聯的。 int + int相加的結果是兩個值的算術和。 intString相加的結果相當於將int轉換為其String表示,然后在兩個String之間執行+操作,將兩個值連接起來。 因此,

a+b+"String"` => (a + b) + "String"
              => (2 + 7) + "String"
              => 9 + "String"
              => "9String"
a+b+"String"+a+b+"String"` => ((((a + b) + "String") + a) + b) + "String"
                           => ((((2 + 7) + "String") + 2) + 7) + "String"
                           => (((9 + "String") + 2) + 7) + "String"
                           => (("9String" + 2) + 7) + "String"
                           => ("9String2" + 7) + "String"
                           => "9String27" + "String"
                           => "9String27String"

確定+是表示加法還是串聯的過程:

  1. 將標准運算符優先級規則應用於表達式以計算應用運算符的順序。

  2. 檢查每個+ 如果+左操作數表達式和右操作數表達式都是原始或包裝數字,則+是加法。 否則它是字符串連接。

例子:

應用優先規則

a+b+"String"+a+b+"String"

意味着它等價於

((((a+b)+"String")+a)+b)+"String"

然后:

  • a+b是加法
  • (a+b)+"String")是串聯
  • ((a+b)+"String")+a是串聯
  • (((a+b)+"String")+a)+b是串聯
  • ((((a+b)+"String")+a)+b)+"String"是串聯

這與您為該案例獲得的輸出9String27String相匹配。

編碼

System.out.println("String"+a+b+"String");

假設您要進行String連接。

你可以做

System.out.println("String"+(a+b)+"String");

或者

System.out.printf("String%dString%n", a+b);

在 Java 中,加號可用於執行算術加法。

它還可以用於連接字符串。 當以這種方式使用加號時,右邊的操作數在與左邊的操作數連接之前會自動轉換為字符串。

你最好檢查java規范中的String Concatenation Operator + ,你會看到下面的說明,這會給你答案

在此處輸入圖片說明

請先理解字符串中“+”的含義

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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