Kadang-kadang java teka-teki saya. Saya memiliki sejumlah besar int inisialisasi untuk membuat.
Apa's nyata perbedaan?
Integer.toString(i)
new Integer(i).toString()
Bilangan bulat.toString
panggilan metode statis di kelas bilangan Bulat
. Itu tidak membutuhkan sebuah contoh dari bilangan Bulat
.
Jika anda menelepon new Integer(i)
anda membuat sebuah instance dari tipe Integer
, yang penuh objek Java yang merangkum nilai int. Kemudian anda menelepon toString
metode untuk meminta untuk kembali representasi string sendiri.
Jika semua yang anda inginkan adalah untuk mencetak sebuah int
, anda'a menggunakan yang pertama karena itu's lebih ringan, lebih cepat dan doesn't menggunakan memori tambahan (selain dari kembali string).
Jika anda ingin sebuah objek yang mewakili nilai integer—untuk memasukkannya ke dalam koleksi untuk contoh—you'd gunakan kedua, karena hal itu memberikan anda sebuah objek penuh untuk melakukan semua jenis hal-hal yang tidak dapat anda lakukan dengan telanjang int
.
new Integer(i).toString()
pertama yang menciptakan (berlebihan) pembungkus benda di sekitar aku
(yang dengan sendirinya dapat menjadi pembungkus objek bilangan Bulat
).
Integer.toString(i)
lebih disukai karena itu doesn't membuat benda yang tidak perlu.
Pilihan lain adalah statis String.valueOf
metode.
String.valueOf(i)
Itu terasa sedikit lebih tepat daripada Integer.toString(i)
untuk saya. Ketika jenis i perubahan, misalnya dari int
untuk double
, kode akan tetap benar.
new Integer(i).toString();
Pernyataan ini menciptakan objek Integer dan kemudian memanggil metode toString(i)
ke kembali representasi String Integer's nilai.
Integer.toString(i);
Itu kembali objek String yang mewakili spesifik int (integer), tapi di sini toString(int)
adalah statis
metode.
Ringkasan dalam kasus pertama itu kembali benda-benda representasi string, dimana dalam kedua kasus itu kembali representasi string integer.
Saya juga sangat merekomendasikan menggunakan
int integer = 42;
String string = integer + "";
Sederhana dan efektif.
Meskipun saya suka fhucho's rekomendasi dari
String.valueOf(i)
Ironi adalah bahwa metode ini benar-benar panggilan
Integer.toString(i)
Dengan demikian, menggunakan String.valueOf(i)
jika anda seperti bagaimana membaca dan anda don't perlu radix, tetapi juga mengetahui bahwa hal ini kurang efisien dari Integer.toString(i)
.
Dalam hal pengukuran kinerja, jika anda sedang mempertimbangkan kinerja waktu kemudian Integer.toString(i); lebih mahal jika anda menelepon kurang dari 100 juta kali. Lain lagi jika lebih dari 100 juta panggilan maka new Integer(10).toString() akan tampil lebih baik.
Di bawah ini adalah kode melalui u dapat mencoba untuk 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,
new Integer(i).toString();
akan memakan memori lebih banyak karena akan membuat objek setiap waktu, sehingga fragmentasi memori akan terjadi.
Di sini
Integer.toString
panggilan metode statis di kelas Integer. Tidak memerlukan objek untuk menelepon.
Jika anda menelepon new Integer(i)
anda terlebih dahulu membuat instance dari tipe Integer, yang penuh objek Java yang merangkum nilai int i. Kemudian anda menelepon toString
metode itu untuk menanyakan hal itu untuk mengembalikan sebuah string representasi dari dirinya sendiri.
1.Bilangan bulat.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