さて、メモとしては、xが何であるかによって異なります。 xは、Javaのプリミティブである場合、あなたは、私がのtoString()は、一般的に優れている使用して言う
Integer.toString(x)
よう.toString()
、そのラッパーのいずれかを使用して呼び出す必要があるため、X +「」は、少なくともJavaで2つのストリングを一緒に追加したいと言っています。この例では
同様:
public static void main(String[] args)
{
int x = 3;
String s = x + "";
}
として、バイトコードで、終わる:
public static void main(java.lang.String[]);
Code:
0: iconst_3
1: istore_1
2: new #2; //class java/lang/StringBuilder
5: dup
6: invokespecial #3; //Method java/lang/StringBuilder."<init>":()V
9: iload_1
10: invokevirtual #4; //Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
13: ldC#5; //String
15: invokevirtual #6; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
18: invokevirtual #7; //Method java/lang/StringBuilder.toString:()Ljava/lang/String;
21: astore_2
22: return
は、だから、一緒に追加するのStringBuilder「」とxの文字列値を作成する必要があります。失われた効率はそれほど多くはありませんが、単にtoString関数を使用するだけではありません。
public static void main(String[] args)
{
int x = 3;
String s = Integer.toString(x);
}
として終わる: - あなたがしたい
public static void main(java.lang.String[]);
Code:
0: iconst_3
1: istore_1
2: iload_1
3: invokestatic #2; //Method java/lang/Integer.toString:(I)Ljava/lang/String;
6: astore_2
7: return
そしてそれはちょうど私の意見であるかもしれませんが、.toStringを使用して、あなたが実際に何をしたい反映
はのtoStringを使用して比較しますxの文字列値は、x + ""を使用している間、ハックのようなもので、 " - "と連結されたxの文字列値が必要です。
サイドノート: 私は中間バイトコードについては話せませんが、C#ではemitを実行しますが、これに似たものが想像されます。さらに、C#では、参照型と同じくらい簡単に値型の.ToString()を呼び出すことができるので、私のアドバイスは同じように適用されると思います。
教授が公共部門で実際のコードを書いていないことに、私は非常に感謝しています。 –
C++タグは削除されました。これはC++とはまったく関係がないためです。 – Puppy
I *ほとんどの場合、 '' '+ str'を使用します。これは、 'str'がnullの場合にも有効です。これはよくあるとは限りません.--)順序は' str + ""ではありません! C#とJavaは特殊な "オーバーロード"された演算子を持っているので、両方とも動作します。下のすべての回答が私の好みのフォームに関連しているかどうかはわかりません。 –