web-dev-qa-db-ja.com

Javaのint型からint型への変換 - Integer.toString(i)と新しいInteger(i).toString()の比較

時々Javaは私を困惑させます。
大量の int 初期化があります。

real の違いは何ですか?

  1. Integer.toString(i)
  2. new Integer(i).toString()
419
marcolopes

Integer.toString はクラスの静的メソッドを呼び出します IntegerIntegerのインスタンスは必要ありません。

new Integer(i) を呼び出すと、Integer型のインスタンスが作成されます。これは、intの値をカプセル化した完全なJavaオブジェクトです。それからtoStringメソッドを呼び出して、 自身 の文字列表現を返すように要求します。

あなたが望むことがintを印刷することだけであるならば、あなたはそれがより軽く、速く、そして(返された文字列を除いて)余分なメモリを使わないので最初のものを使うでしょう。

例えばコレクションの中に整数値を表現するオブジェクトが欲しいなら、あなたは裸のintではできないあらゆる種類のことをするための本格的なオブジェクトを与えるので、2番目のオブジェクトを使うでしょう。 。

541
Jean

new Integer(i).toString()は最初にiの周囲に(冗長)ラッパーオブジェクトを作成します(それ自体がラッパーオブジェクトIntegerである可能性があります)。

不要なオブジェクトを作成しないため、Integer.toString(i)が推奨されます。

95
oksayt

別のオプションは静的な String.valueOf メソッドです。

String.valueOf(i)

それは 私にはInteger.toString(i)よりやや正しい を感じています。 iの型が例えばintからdoubleに変わるとき、コードは正しいままです。

42
fhucho
  1. new Integer(i).toString();

    このステートメントは、Integerのオブジェクトを作成し、そのメソッドtoString(i) に呼び出して、Integerの値の文字列表現 を返します。

  2. Integer.toString(i);

    それは 特定のint(整数)を表すStringオブジェクトを返します しかし、ここでtoString(int)staticメソッドです。

要約は前者の場合はオブジェクトの文字列表現を返し、後者の場合は整数の文字列表現を返します。

14
Dhiraj

私も強くお勧めします

int integer = 42;
String string = integer + "";

シンプルで効果的です。

13
Jasper Holton

私はfhuchoの推薦が好きですが

String.valueOf(i)

皮肉なことに、このメソッドは実際に呼び出すことです。

Integer.toString(i)

したがって、読み方が好きで基数が不要な場合はString.valueOf(i)を使用しますが、Integer.toString(i)よりも効率が悪いことがわかっています。

11
Nathan Waite

パフォーマンス測定に関しては、時間パフォーマンスを検討している場合は、 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();

毎回オブジェクトが作成されるため、より多くのメモリが必要になるため、メモリの断片化が発生します。

4
Dhiraj

簡単な方法は、単に""を整数に連結することです。

int i = 100;

String s = "" + i;

sは文字列値として100を持ちます。

2
ShivBuyya

より良い:

Integer.valueOf(i).toString()
2
ryu

ここでInteger.toStringはIntegerクラスのstaticメソッドを呼び出します。オブジェクトを呼び出す必要はありません。

new Integer(i)を呼び出すと、最初にInteger型のインスタンスを作成します。これは、int iの値をカプセル化した完全なJavaオブジェクトです。それからtoStringメソッドを呼び出して、それ自身の文字列表現を返すように要求します。

1
Shailej Shimpi

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