このコードを実行している間に、 +
私の整数を文字列に変換しています。
public class Test {
public static void main(String...string){
int m=9;
int k=10;
String s=new String(m +"");//automatic type conversion from int to string
String j=m+"" +k;////automatic type conversion from int to string
System.out.println(s+j);
String s1=String.valueOf(m);
System.out.println(s1);
}
}
理解できない +
ここでやっていることと、それがどのようにして文字列に変換されるのか、ということです。 =
オペレーター?
回答:
回答№1の場合は7これは右から左への優先順位と関係がある =
演算子?
回答: いいえ
そしてそれは持っています 整数型でも関係ない。 どうして ?なぜなら これは何ですか JSL いう
文字列変換はbinary +演算子のオペランドにのみ適用されます 他のオペランドが文字列の場合、これは文字列ではありません。
この単一の特別な場合では、+に対する非文字列オペランドは次のようになります。 文字列(5.1.11)に変換し、+演算子を評価する 15.18.1項で指定されたとおりに処理を進めます。
あなたが他の型変数を書いたとしてもそうそれはそれを変換するでしょうこのスニペットを考えてください
public static void main(String...string){
double u=9.0;
System.out.println(u+"hi");
}
それは私に出力を与える
9.0hi
今どうやって来るの?
私が投稿したコードスニペットについて これはこのコンパイル済みコードの一部です。
public static void main(java.lang.String...);
flags: ACC_PUBLIC, ACC_STATIC, ACC_VARARGS
Code:
stack=5, locals=3, args_size=1
0: ldc2_w #16 // double 9.0d
3: dstore_1
4: getstatic #18 // Field java/lang/System.out:Ljav
a/io/PrintStream;
7: new #24 // class java/lang/StringBuilder
10: dup
11: dload_1
12: invokestatic #26 // Method java/lang/String.valueOf
:(D)Ljava/lang/String;
15: invokespecial #32 // Method java/lang/StringBuilder.
"<init>":(Ljava/lang/String;)V
18: ldc #35 // String hi
20: invokevirtual #37 // Method java/lang/StringBuilder.
append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
23: invokevirtual #41 // Method java/lang/StringBuilder.
toString:()Ljava/lang/String;
26: invokevirtual #45 // Method java/io/PrintStream.prin
tln:(Ljava/lang/String;)V
だから内部的に呼び出す valueOf()
doubleまたはstring以外のオペランドをStringに変換してから呼び出すメソッド append()
完全に文字列に変換します。 これがお役に立てば幸いです:)
回答№2の場合は0
答えをもっとシンプルにしたいので、これを投稿しています。
"+" is the only operator in java that is overloaded for String type for string concatenation
.
したがって、2つのオペランドのいずれかがStringの場合、全体の操作は連結のためにオーバーロードされます。
そう string+(any other datatype) = string.
したがって、他のすべてのオペランドでは、文字列とともに丸括弧を使用します。
そう 5+5+"" =55
そして (5+5)+"" = 10
注:右から左の優先順位とは関係ありません。