6

文字列連結と混同しました。

String s1 = 20 + 30 + "abc" + (10 + 10);
String s2 = 20 + 30 + "abc" + 10 + 10;
System.out.println(s1);
System.out.println(s2);

出力は次のとおりです。

50abc20
50abc1010

どちらの場合も20 + 30が加算されるのはなぜでしょうか。ただし、 10 + 10を追加するには (s1)、文字列に連結する (s2) のではなく、括弧が必要です。ここで文字列演算子がどのように機能するかを説明してください+

4

5 に答える 5

10

加算は結合性のままです。最初のケースを取る

20+30+"abc"+(10+10)
-----       -------
  50 +"abc"+  20    <--- here both operands are integers with the + operator, which is addition
  ---------
  "50abc"  +  20    <--- + operator on integer and string results in concatenation
    ------------
      "50abc20"     <--- + operator on integer and string results in concatenation

2番目の場合:

20+30+"abc"+10+10
-----
  50 +"abc"+10+10  <--- here both operands are integers with the + operator, which is addition
  ---------
   "50abc"  +10+10  <--- + operator on integer and string results in concatenation
    ----------
    "50abc10"  +10  <--- + operator on integer and string results in concatenation
     ------------
      "50abc1010"   <--- + operator on integer and string results in concatenation
于 2013-03-11T13:53:08.430 に答える
1

また、このトピックに追加するために、Jonathan Schober の回答の間違った部分が心に留めておくべきことを教えてくれました。

a+=somethingと等しくないa=a+<something>: は+=最初に右側を評価し、次にそれを左側に追加します。したがって、書き直す必要があります。これは次と同等です。

a=a+(something); //notice the parentheses!

違いを示す

public class StringTest {
  public static void main(String... args){
    String a = "";
    a+=10+10+10;

    String b = ""+10+10+10;

    System.out.println("First string, with += : " + a);
    System.out.println("Second string, with simple =\"\" " + b);

  }
}
于 2013-03-12T09:34:33.140 に答える
1

結合性の概念に加えて、かっこを使用して常に文字列と整数をペアにすることで、2 つの整数が決して加算されないようにすることができます。これにより、加算ではなく目的の連結操作が行われます。

String s4 = ((20 + (30 + "abc")) + 10)+10;

生成されます:

2030abc1010
于 2013-03-11T13:59:12.550 に答える
0

いくつかのルールを知っておく必要があります:
1、Java演算子の優先度、左から右への大部分
2、+記号の優先度よりも角かっこの優先度。3、結果は合計です。 +記号
の両側 が整数の場合、それ以外の場合は連結です。

于 2013-03-12T09:20:35.577 に答える
0

空の文字列から始める必要があります。

したがって、これはうまくいくかもしれません:

String s2 = ""+20+30+"abc"+10+10; 

またはこれ:

String s2 ="";
s2 = 20+30+"abc"+10+10;
System.out.println(s2);
于 2013-03-11T14:02:05.217 に答える