私は高校で AP Comp sci を始めたばかりで、文字列の + 演算子に関する質問に出くわしました。
number620
System.out.println ("number" + 6 + 4 * 5)
になる理由
一方
String s = "crunch";
int a = 3, b = 1;
System.out.print(s + a + b);
System.out.print(b + a + s);
結果はcrunch314crunch
?
ありがとう
私は高校で AP Comp sci を始めたばかりで、文字列の + 演算子に関する質問に出くわしました。
number620
System.out.println ("number" + 6 + 4 * 5)
になる理由
一方
String s = "crunch";
int a = 3, b = 1;
System.out.print(s + a + b);
System.out.print(b + a + s);
結果はcrunch314crunch
?
ありがとう
優先順位によって異なります
2 つの演算子がオペランドを共有する場合、優先順位の高い演算子が先になります。たとえば、1 + 2 * 3 は 1 + (2 * 3) として扱われますが、1 * 2 + 3 は (1 * 2) + 3 として扱われます。これは、乗算が加算(+)よりも優先されるためです。
System.out.println ("number" + 6 + 4 * 5) が number620 になるのはなぜですか?
* は + よりも優先順位が高いため、結果はnumber620
.
文字列 s = "クランチ"; int a = 3、b = 1; System.out.print(s + a + b); System.out.println(b + a + s); crunch314crunch の結果?
ここで、+ は二項演算としてではなく、演算子のオーバーロードとして使用されます。したがって、「+」は合計操作ではなく連結操作を行います。したがって、結果はcrunch314crunch
です。
それは次の 2 点についてです。
には+
次の規則があります。
int + int => int
int + string => String
String + int => String
String + String => String
つまり、 aString
が含まれるとすぐに、+
連結を意味します。
優先順位が同じ演算子は、左から右に評価されます。したがって
String + int + int => String + int => String
しかし
int + int + String => int + String => String
最初のケースでは連結のみを使用しますが、2 番目のケースでは最初のステップで加算を使用します。
最初の例で*
は、 よりも優先順位が高い+
ため、乗算が最初に実行されます。
String + int * int => String + int => String
最初の例: "number" + 6 + 4 * 5
ACC。to 演算子の優先順位*
が最初に計算されるため、「number」+ 6 + 20になります。
ここで+
、結合性は Left -> Right (L->R) であるため、 + は と一緒String
に使用される連結演算子になり、式は"number6" + 20になり、次に"number620"になります。
(実際には連結前にint
変換されます)String
同様に、2番目の例:
演算子のみ+
で、L->R から実行を開始
「クランチ」 + 3 + 1 = 「クランチ 3」 + 1 = 「クランチ 31」
1 + 3 + "クランチ" = 4 + "クランチ" = "4 クランチ"
ご質問と回答によると
説明は
1.
A)System.out.println ("number" + 6 + 4 * 5);
B)System.out.println ("number6" + 4 * 5);
C)System.out.println ("number6" + 20);
D)System.out.println ("number620");
そして、次のような出力を出力します
number620
そして2つ目は
2.
A)System.out.print("crunch" + 3 + 1);
System.out.print(1 + 3 + "crunch");
B)System.out.print("crunch3" + 1);
System.out.print(4 + "crunch");
C)System.out.print("crunch31");
System.out.print("4crunch");
print()
そして、ステートメントを使用したため、出力を1行で出力します
crunch314crunch
Java は文字列を 1 番目に認識するため、数学を に変換したい場合はSystem.out.println
、中括弧で囲みます。
試してみてくださいSystem.out.println ("number" + (6 + 4 * 5))
。
2 番目の使用例:System.out.print(s + (a + b));
この場合、 と の合計がa
ありb
ます。
しかし、1位にとどまりますSystem.out.print(b + a + s);
b
。a
コンパイラはa+b
最初に文字列を追加した後、中括弧は必要ありません
演算子の優先順位と関係があります。
まず、4 * 5 = 20
2 つ目は、「数値」が 6 と連結され、さらに 20 と連結されます。
最初の例では、乗法演算子を使用したため、4 は他の文字列に連結される前に 5 に乗算されます。
2 番目の例では、文字列に連結される前に最初に計算される文字列の前に 2 つの整数から始めました。