JavaのintからString-Integer.toString(i)と新しいInteger(i).toString()


428

時々javaは私を困惑させます。
実行するintの初期化が大量にあります。

本当の違いは?

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

20
私は単に使用します"" + 42が、ちょっと、それは私です。フォーム#2は、中間として新しい整数オブジェクト(iのほとんどの値)になります。また、よりタイピングです。

16
@pst:中間オブジェクトが問題である場合、それよりもはるかに重い"" + 42中間体StringBuilderを必要とするため、それ以上のことはありませんInteger
ヨアヒムザウアー

47
"" + 42は機能するかもしれませんが、お勧めできません。私のような人々はあなたのコードを見て、空の文字列に何が起こったのかを理解しようとします。
Mainguy 2010

3
"" + 42整数の文字列を追加する場合、結果的に値を追加してしまい、実現しない場合があるため、お勧めしません。
BoltzmannBrain

20
あまりタイピングが気に入らない場合は、おそらくJavaでプログラミングするべきではありません。
Adam Pierce

回答:


548

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

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

必要なのがを印刷するintことだけである場合は、最初の1つを使用します。これは軽量で高速であり、(返される文字列を除いて)追加のメモリを使用しないためです。

整数値を表すオブジェクト(たとえば、コレクション内に配置する)が必要な場合は、2番目のオブジェクトを使用しますint。これは、裸のオブジェクトでは実行できないあらゆる種類のことを実行する本格的なオブジェクトを提供するためです。


96

new Integer(i).toString()最初に(冗長な)ラッパーオブジェクトi(それ自体がラッパーオブジェクトの場合もありますInteger)を作成します。

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


43

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

String.valueOf(i)

それInteger.toString(i)私よりも少し正しいと感じています。iのタイプが、たとえばからintに変わっても、doubleコードは正しいままです。


2
はい。RADIXを使用する必要がある場合を
除き

14
  1. new Integer(i).toString();

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

  2. Integer.toString(i);

    これは、特定の整数(整数)を表す文字列オブジェクトを返すが、ここtoString(int)static方法。

要約は、最初の場合はオブジェクトの文字列表現を返し、2番目の場合と同様に整数の文字列表現を返します。


13

私も使用することを強くお勧めします

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

シンプルで効果的。


38
これはJava言語のかなり微妙な部分に依存しており、Integer.toString(i)よりも効率が悪いため、これは明らかに悪い形式です。このSO投稿を
rickcnagy

これは非効率的です。Integer.toStringやString.valueOfなどの従来の選択肢を使用することをお勧めします。ここをチェックjavadevnotes.com/java-integer-to-string-examples
JavaDev

このような直感的でない方法で物事を行うことは、一般的に悪い考えです。などのより明白な選択でInteger.toString()は、追加のキーストロークを使用する場合がありますが、はるかに明確です。これは、コードを保守する場合に重要です。
Calvin Li

これは整数変数のtoString()メソッドを自動的に呼び出しませんか?
Ankit Deshpande 2015

11

私はフーチョの推薦が好きですが

String.valueOf(i)

皮肉なことに、このメソッドは実際に

Integer.toString(i)

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


4

パフォーマンス測定に関して、時間パフォーマンスを検討している場合は、Integer.toString(i); 呼び出し回数が1億回未満の場合は高価です。それ以外の場合は、1億回を超える呼び出しが行われると、新しい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));
    }

メモリに関しては、

新しいInteger(i).toString();

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


2
このコードをIntelliJ IDEAに貼り付け、警告が表示されました: " new Integer(10).toString() can be simplified to Integer.toString(10)"
oksayt

このコードは私にとってはうまくいきます。Integer.toString(10)で約420ミリ秒、新しいInteger(10).toString()で525ミリ秒
Jake Stevens-Haas


最初にウォームアップに役立ちましたか、そうでなければ結果は有効ではありません!
sixones 2016

一方が高額で、もう一方がより高額であると言う場合、それは他方がすべての状況でより優れている/安価であることを意味します。
Sgene9 2017

2

より良い:

Integer.valueOf(i).toString()

9
なぜこれが良いのですか?
エミール

1
@Dhirajがメモリの点で「新しいInteger(i).toString();」を指摘したので、これはより良いと思います。Integer値を取得して文字列に変換するだけでなく、新しいオブジェクトを作成するため、より多くのメモリが必要になります。
パトリシア

4
@Lucy Integer.valueOf(i)は新しいIntegerを返すため、違いはありません
inigoD '27 / 02/27

質問に対する答えをまったく提供していません。問題は、何とか何とか何とか何と何が違うかということであり、何が何より良い代替品であるかではありません。
ahitt6345 2016

2

単純な方法は""整数と連結するだけです:

int i = 100;

String s = "" + i;

s100文字列値を持ちます。


1

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

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


0

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.