2

私はJavaを学び、毎日練習しています。次のコードを書いて、出力について疑問に思いました。

class test
{
public static void main(String args[])
{
System.out.println(1+2+ " = " +10+2);
}
}

ここでの出力は3=102であり、次のことについて疑問に思いました。「Javaは、System outステートメントで文字列を検出すると、すべてを文字列として扱い始めます」

誰かがこれを説明できますか?混乱しているのはなぜそれを文字列として受け入れるのですか?

4

4 に答える 4

6

Javaは、式のタイプに関係なくプログラムテキストを解析します。動機として、それらがクラスのメソッドの後に書かれたフィールドであるかどうかを検討してください。したがって、文字列の連結と加算は同じ演算子を共有するため、次のようになります。

1+2+ " = " +10+2

と同等です

((((1+2)+ " = ") +10)+2)

畳み込み定数、

(((3+ " = ") +10)+2)
(("3 = " +10)+2)
("3 = 10"+2)
"3 = 102"
于 2012-12-26T13:07:03.077 に答える
1

+文字列を使用すると、加算演算子ではなく文字列連結演算子になります。

1 + 2 + 10 + 2単純な加算として15に等しくなりますが、1
1 + 2 + "+" + 10 + 2として扱われ
ます。1 + 2出力は単純な加算であるため 3になります
。2。3 + = (String) 出力 3=は文字列連結であるためです。3。文字列連結であり、単純な加算ではないため、出力はなれ
3= (String) + 10 + 23=102

于 2012-12-26T13:06:57.273 に答える
1

「Javaは、System.outステートメントで文字列を検出すると、すべてを文字列として扱い始めます。」

それは完全に間違っています。System.outクラスの静的インスタンスですPrintStream。PrintStreamには、println()メソッドのオーバーロードされたバージョンが多数あり、例の1つはパラメーターとして受け入れStringます。+演算子を使用しており、オペランドが両方とも数値でない限り、文字列を連結するためのものです。

System.out.println(3+5+"."); // println(String) is invoked.
System.out.println(3+5); // println(int) is invoked.
于 2012-12-26T13:08:17.820 に答える
0
  (1+2) -- two integres additoin will result int 3
  (3 +  " = ") -- this will result int + String = String (concatination)
  ("3=") -- String + any thing (data type) will result String 
于 2012-12-26T13:07:26.767 に答える