Java int to String - Integer.toString (i) vs Integer baru (i) .toString ()

428

Terkadang java membingungkan saya.
Saya memiliki sejumlah besar int inisialisasi untuk membuat.

Apa yang asli? perbedaan ?

  1. Integer.toString(i)
  2. new Integer(i).toString()
marcolop
sumber
20
Saya hanya akan menggunakan "" + 42, tapi hei, itu saya. Formulir # 2 akan menghasilkan objek integer baru (untuk sebagian besar nilai i) sebagai perantara. Ini juga lebih banyak mengetik.
16
@ pst: jika objek perantara adalah masalah bagi Anda, maka "" + 42tidak ada yang lebih baik, karena membutuhkan perantara StringBuilderyang cukup banyak lebih berat daripada Integer.
Joachim Sauer
47
"" +42 mungkin bekerja, tetapi itu ide yang buruk. Orang-orang seperti saya akan melihat kode Anda dan mencoba mencari tahu apa yang terjadi pada string kosong.
Mainguy
3
Saya tidak akan merekomendasikan "" + 42karena dalam kasus menambahkan string bilangan bulat Anda mungkin akhirnya menambahkan nilai-nilai dan tidak menyadarinya.
BoltzmannBrain
20
Jika Anda tidak suka banyak mengetik, maka Anda mungkin tidak seharusnya pemrograman di Java.
Adam Pierce

Jawaban:

548

Integer.toStringmemanggil metode statis di kelas Integer. Tidak perlu turunan dariInteger .

Jika Anda menelepon, new Integer(i)Anda membuat turunan tipe Integer, yang merupakan objek Java lengkap yang merangkum nilai int Anda. Kemudian Anda memanggil toStringmetode di atasnya untuk memintanya mengembalikan representasi string itu sendiri .

Jika yang Anda inginkan hanyalah mencetak int , Anda akan menggunakan yang pertama karena lebih ringan, lebih cepat dan tidak menggunakan memori tambahan (selain dari string yang dikembalikan).

Jika Anda ingin objek yang mewakili nilai integer — untuk memasukkannya ke dalam koleksi, misalnya — Anda akan menggunakan yang kedua, karena ia memberi Anda objek lengkap untuk melakukan semua hal yang tidak dapat Anda lakukan dengan telanjang int.

Jean
sumber
96

new Integer(i).toString()pertama membuat objek pembungkus (redundan) di sekitarnya i(yang itu sendiri mungkin merupakan objek pembungkus Integer).

Integer.toString(i) lebih disukai karena tidak membuat objek yang tidak perlu.

oksayt
sumber
43

Pilihan lain adalah String.valueOfmetode statis .

String.valueOf(i)

Ini terasa sedikit lebih benar daripada Integer.toString(i)dengan saya. Ketika jenis i berubah, misalnya dari intke double, kode akan tetap benar.

fhucho
sumber
2
Iya. Kecuali Anda harus menggunakan RADIX (dalam hal ini Anda harus menggunakan Integer.toString)
marcolopes
14
  1. new Integer(i).toString();

    Pernyataan ini menciptakan objek Integer dan kemudian memanggil metode-metodenya toString(i)untuk mengembalikan representasi String dari nilai Integer .

  2. Integer.toString(i);

    Ini mengembalikan objek String yang mewakili int tertentu (integer) , tetapi di sini toString(int)adalah staticmetode.

Ringkasan dalam kasus pertama mengembalikan representasi string objek, di mana seperti dalam kasus kedua ia mengembalikan representasi string integer.

Dhiraj
sumber
13

Saya juga sangat merekomendasikan menggunakan

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

Sederhana dan efektif.

Jasper Holton
sumber
38
ini jelas merupakan bentuk yang buruk, karena keduanya bergantung pada bagian bahasa Jawa yang cukup halus dan kurang efisien daripada Integer.toString (i). Lihat posting ini SO
rickcnagy
Ini bisa jadi tidak efisien. Saya sarankan menggunakan beberapa pilihan konvensional seperti Integer.toString atau String.valueOf. Lihat di sini javadevnotes.com/java-integer-to-string-examples
JavaDev
Ini umumnya ide yang buruk untuk melakukan hal-hal dengan cara yang tidak intuitif. Pilihan yang lebih jelas seperti Integer.toString()mungkin menggunakan beberapa penekanan tombol tambahan, tetapi jauh lebih jelas, yang sangat penting ketika Anda ingin mempertahankan kode.
Calvin Li
Bukankah ini akan secara otomatis memanggil toString()metode variabel integer ?
Ankit Deshpande
11

Meskipun saya suka rekomendasi fhucho dari

String.valueOf(i)

Ironinya adalah bahwa metode ini sebenarnya memanggil

Integer.toString(i)

Jadi, gunakan String.valueOf(i)jika Anda suka cara membaca dan Anda tidak perlu radix, tetapi juga tahu bahwa itu kurang efisien daripada Integer.toString(i).

Nathan Waite
sumber
4

Dalam hal pengukuran kinerja, jika Anda mempertimbangkan kinerja waktu maka Integer.toString (i); mahal jika Anda menelepon kurang dari 100 juta kali. Jika tidak lebih dari 100 juta panggilan maka Integer baru (10) .toString () akan berkinerja lebih baik.

Di bawah ini adalah kode melalui Anda dapat mencoba mengukur kinerja,

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

Dalam hal memori,

Integer baru (i) .toString ();

akan mengambil lebih banyak memori karena akan membuat objek setiap waktu, sehingga fragmentasi memori akan terjadi.

Dhiraj
sumber
2
Saya menempelkan kode ini di IntelliJ IDEA dan mendapat peringatan: " new Integer(10).toString() can be simplified to Integer.toString(10)"
oksayt
Kode ini berfungsi untuk saya. Saya mendapatkan sekitar 420 milidetik untuk Integer.toString (10) dan 525 milidetik untuk Integer baru (10) .toString ()
Jake Stevens-Haas
1
Lihat stackoverflow.com/questions/504103/ ... ...
Petr Tuma
Akan membantu pemanasan terlebih dahulu, jika tidak hasilnya tidak valid!
Sixones
Jika Anda mengatakan satu mahal dalam satu kasus, dan yang lain lebih baik dalam kasus lain, itu berarti yang lain lebih baik / murah dalam semua situasi.
Sgene9
2

Lebih baik:

Integer.valueOf(i).toString()
ryu
sumber
9
Kenapa ini lebih baik?
Emile
1
Saya pikir ini lebih baik, karena seperti @Dhiraj menunjukkan bahwa dalam hal memori, "Integer baru (i) .toString ();" akan mengambil lebih banyak memori karena ia menciptakan objek baru alih-alih hanya mendapatkan nilai Integer dan mengubahnya menjadi string.
Patricia
4
@Lucy Integer.valueOf (i) mengembalikan Integer baru, jadi tidak ada perbedaan
inigoD
Anda sama sekali tidak memberikan jawaban untuk pertanyaan itu. Pertanyaannya adalah apa perbedaan antara bla dan bla, bukan apa pengganti bla yang lebih baik.
ahitt6345
2

Cara sederhana hanya digabungkan ""dengan integer:

int i = 100;

String s = "" + i;

sekarang sakan memiliki 100nilai string.

Shiv Buyya
sumber
1

Sini Integer.toString memanggil metode statis di Integer kelas. Itu tidak memerlukan objek untuk memanggil.

Jika Anda menelepon new Integer(i)Anda, pertama-tama buat instance dari tipe Integer, yang merupakan objek Java lengkap yang merangkum nilai int i Anda. Kemudian Anda memanggil toStringmetode di atasnya untuk memintanya mengembalikan representasi string itu sendiri.

Shailej Shimpi
sumber
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
Shiva Nandam Sirmarigari
sumber