時々Javaは私を困惑させます。
大量の int 初期化があります。
real の違いは何ですか?
Integer.toString(i)
new Integer(i).toString()
Integer.toString
はクラスの静的メソッドを呼び出します Integer
。 Integer
のインスタンスは必要ありません。
new Integer(i)
を呼び出すと、Integer
型のインスタンスが作成されます。これは、intの値をカプセル化した完全なJavaオブジェクトです。それからtoString
メソッドを呼び出して、 自身 の文字列表現を返すように要求します。
あなたが望むことがint
を印刷することだけであるならば、あなたはそれがより軽く、速く、そして(返された文字列を除いて)余分なメモリを使わないので最初のものを使うでしょう。
例えばコレクションの中に整数値を表現するオブジェクトが欲しいなら、あなたは裸のint
ではできないあらゆる種類のことをするための本格的なオブジェクトを与えるので、2番目のオブジェクトを使うでしょう。 。
new Integer(i).toString()
は最初にi
の周囲に(冗長)ラッパーオブジェクトを作成します(それ自体がラッパーオブジェクトInteger
である可能性があります)。
不要なオブジェクトを作成しないため、Integer.toString(i)
が推奨されます。
別のオプションは静的な String.valueOf
メソッドです。
String.valueOf(i)
それは 私にはInteger.toString(i)
よりやや正しい を感じています。 iの型が例えばint
からdouble
に変わるとき、コードは正しいままです。
new Integer(i).toString();
このステートメントは、Integerのオブジェクトを作成し、そのメソッドtoString(i)
を に呼び出して、Integerの値の文字列表現 を返します。
Integer.toString(i);
それは 特定のint(整数)を表すStringオブジェクトを返します しかし、ここでtoString(int)
はstatic
メソッドです。
要約は前者の場合はオブジェクトの文字列表現を返し、後者の場合は整数の文字列表現を返します。
私も強くお勧めします
int integer = 42;
String string = integer + "";
シンプルで効果的です。
私はfhuchoの推薦が好きですが
String.valueOf(i)
皮肉なことに、このメソッドは実際に呼び出すことです。
Integer.toString(i)
したがって、読み方が好きで基数が不要な場合はString.valueOf(i)
を使用しますが、Integer.toString(i)
よりも効率が悪いことがわかっています。
パフォーマンス測定に関しては、時間パフォーマンスを検討している場合は、 Integer.toString(i); あなたが1億回以下の電話をしているならば、高価です。そうでなければ、それが1億を超える呼び出しであれば、 new Integer(10).toString() の方がパフォーマンスがよくなります。
以下は、uを介してパフォーマンスを測定できるコードです。
public static void main(String args[]) {
int MAX_ITERATION = 10000000;
long starttime = System.currentTimeMillis();
for (int i = 0; i < MAX_ITERATION; ++i) {
String s = Integer.toString(10);
}
long endtime = System.currentTimeMillis();
System.out.println("diff1: " + (endtime-starttime));
starttime = System.currentTimeMillis();
for (int i = 0; i < MAX_ITERATION; ++i) {
String s1 = new Integer(10).toString();
}
endtime = System.currentTimeMillis();
System.out.println("diff2: " + (endtime-starttime));
}
記憶に関しては、
new Integer(i).toString();
毎回オブジェクトが作成されるため、より多くのメモリが必要になるため、メモリの断片化が発生します。
簡単な方法は、単に""
を整数に連結することです。
int i = 100;
String s = "" + i;
s
は文字列値として100
を持ちます。
より良い:
Integer.valueOf(i).toString()
ここでInteger.toString
はIntegerクラスのstaticメソッドを呼び出します。オブジェクトを呼び出す必要はありません。
new Integer(i)
を呼び出すと、最初にInteger型のインスタンスを作成します。これは、int iの値をカプセル化した完全なJavaオブジェクトです。それからtoString
メソッドを呼び出して、それ自身の文字列表現を返すように要求します。
1 .Integer.toString(i)
Integer i = new Integer(8);
// returns a string representation of the specified integer with radix 8
String retval = i.toString(516, 8);
System.out.println("Value = " + retval);
2 .new Integer(i).toString()
int i = 506;
String str = new Integer(i).toString();
System.out.println(str + " : " + new Integer(i).toString().getClass());////506 : class Java.lang.String