Java int to String - Yeni Tamsayı (i) .toString () ile Integer.toString (i)


428

Bazen java beni şaşırttı.
Yapmam gereken çok sayıda int başlatma var.

Nedir gerçek fark nedir?

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

20
Sadece kullanırdım "" + 42, ama hey, o benim. Form # 2, ara madde olarak yeni bir tamsayı nesnesiyle (çoğu i değeri için) sonuçlanır. Aynı zamanda daha fazla yazıyor.

16
@pst: ara nesne sizin için bir sorunsa, o zaman "" + 42daha iyi değildir, çünkü bir aradan StringBuilderçok daha ağır bir ara ürün gerektirir Integer.
Joachim Sauer

47
"" + 42 işe yarayabilir, ancak kötü bir fikirdir. Benim gibi insanlar kodunuza bakacak ve boş dizeye ne olduğunu anlamaya çalışacaklar.
Mainguy

3
Ben tavsiye etmem "" + 42çünkü tamsayı dizeleri ekleme durumunda değerleri ekleyerek ve fark değil sonunda olabilir.
BoltzmannBrain

20
Çok fazla yazmayı sevmiyorsanız, muhtemelen Java'da programlama yapmamalısınız.
Adam Pierce

Yanıtlar:


548

Integer.toStringsınıftaki statik yöntemi çağırır Integer. Örneğine ihtiyaç duymaz Integer.

Eğer çağırırsanız , int değerinizi kapsayan tam bir Java nesnesi olan bir new Integer(i)tür örneği oluşturun Integer. Sonra diyoruz toStringdize halinde temsilini dönmek için bunu sormak için üzerine yöntemini kendisi .

İstediğiniz tek şey bir tane yazdırmaksa int, birincisini daha hafif, daha hızlı olduğu ve fazladan bellek kullanmadığı için (döndürülen dizenin dışında) kullanırsınız.

Bir tamsayı değerini temsil eden bir nesnenin (örneğin bir koleksiyonun içine koymak için) ikincisini kullanırsınız, çünkü size çıplak olarak yapamayacağınız her şeyi yapmanız için tam teşekküllü bir nesne verir int.


96

new Integer(i).toString()ilk önce (gereksiz) bir sarıcı nesnesi yaratır i(ki bu da kendisi bir sarıcı nesne olabilir Integer).

Integer.toString(i) gereksiz nesneler oluşturmadığı için tercih edilir.


43

Başka bir seçenek statik String.valueOfyöntemdir.

String.valueOf(i)

Bu hissediyor biraz daha fazla hakkı Integer.toString(i)bana. İ tipi değiştirdiğinde, örneğin intiçin double, kodun doğru kalacaktır.


2
Evet.
RADIX

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

    Bu ifade tamsayı nesne oluşturur ve ardından yöntemlerini çağırmak toString(i)için Integer değerinin dize temsilini döndürür .

  2. Integer.toString(i);

    Bu özel int (tam sayı) temsil eden String nesnesini geri gönderir , ancak burada toString(int)a, staticyöntemi.

Özet, ilk durumda nesneler dize temsilini döndürür; ikinci durumda olduğu gibi, tamsayının dize temsilini döndürür.


13

Ayrıca şiddetle tavsiye ederim

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

Basit ve etkili.


38
bu kesinlikle kötü bir formdur, çünkü her ikisi de Java dilinin oldukça ince bir bölümüne dayanır ve Integer.toString (i) 'den daha az verimlidir. Bu SO
yazısına

Bu verimsiz olabilir. Integer.toString veya String.valueOf gibi bazı geleneksel seçenekleri kullanmanızı öneririm. Buradan kontrol edin javadevnotes.com/java-integer-to-string-examples
JavaDev

İşleri böylesine bilinçsiz bir şekilde yapmak genellikle kötü bir fikirdir. Daha belirgin seçenekler Integer.toString()bazı ekstra tuş vuruşlarını kullanabilir, ancak çok daha nettir, bu da kodu korumak istediğinizde çok önemlidir.
Calvin Li

Bu otomatik olarak tamsayı değişkeninin toString()yöntemini çağırmaz mı?
Ankit Deshpande

11

Her ne kadar fhucho'nun tavsiyesini sevsem de

String.valueOf(i)

İronik olan, bu yöntemin aslında

Integer.toString(i)

Bu nedenle, String.valueOf(i)nasıl okunduğunu beğendiyseniz ve radkse ihtiyacınız yoksa, aynı zamanda daha az verimli olduğunu bilerek kullanın Integer.toString(i).


4

Performans ölçümü açısından, eğer zaman performansını düşünüyorsanız o zaman Integer.toString (i); 100 milyondan az kez arıyorsanız pahalı. 100 milyondan fazla çağrı varsa, yeni Integer (10) .toString () daha iyi performans gösterir.

Aşağıda u ile kod performansı ölçmeye çalışabilirsiniz,

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));
    }

Bellek açısından,

yeni Tamsayı (i) .toString ();

her seferinde nesneyi oluşturacağı için daha fazla bellek alacaktır, böylece bellek parçalanması gerçekleşir.


2
Bu kodu IntelliJ new Integer(10).toString() can be simplified to Integer.toString(10)
IDEA'ya

Bu kod benim için çalışıyor. Integer.toString (10) için yaklaşık 420 milisaniye ve yeni Integer (10) .toString () için 525 milisaniye alıyorum
Jake Stevens-Haas


Önce ısınmasına yardımcı olur, aksi takdirde sonuçlar geçerli değildir!
sixones

Biri bir durumda pahalı, diğeri diğer durumda daha iyi ise, diğeri her durumda daha iyi / ucuz demektir.
Sgene9

2

Daha iyi:

Integer.valueOf(i).toString()

9
Bu neden daha iyi?
Emile

1
Bunun daha iyi olduğunu düşünüyorum, çünkü @Dhiraj bellek açısından "yeni Tamsayı (i) .toString ();" yalnızca Integer değerini almak ve bunu bir dizeye dönüştürmek yerine yeni bir nesne oluşturduğu için daha fazla bellek alacaktır.
Patricia

4
@Lucy Integer.valueOf (i) yeni bir Tamsayı döndürür, bu yüzden fark yoktur
inigoD

Soruya hiç cevap vermiyorsunuz. Soru, blah ve blah arasındaki farkın ne olduğu, blah'ın yerine daha iyi bir alternatif değil.
ahitt6345

2

Basit yol sadece ""tamsayı ile birleştirmektir :

int i = 100;

String s = "" + i;

Şimdi solacak 100dize değeri olarak.


1

Burada Integer.toStringInteger sınıfındaki statik yöntemi çağırır. Nesnenin çağrılmasını gerektirmez.

Eğer önce çağırırsanız new Integer(i), int i değerinizi kapsayan tam bir Java nesnesi olan Integer türünde bir örnek oluşturun. Sonra toStringüzerinde bir dize temsili döndürmesini istemek için yöntem çağırırsınız .


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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.