Dalam Java Efektif Joshua Bloch , Item 5: "Hindari membuat objek yang tidak perlu", ia memposting contoh kode berikut:
public static void main(String[] args) {
Long sum = 0L; // uses Long, not long
for (long i = 0; i <= Integer.MAX_VALUE; i++) {
sum += i;
}
System.out.println(sum);
}
dan butuh 43 detik untuk berjalan. Mengambil Long ke primitif membuatnya turun menjadi 6,8 detik ... Jika itu indikasi mengapa kita menggunakan primitif.
Kurangnya kesetaraan nilai asli juga merupakan masalah ( .equals()
cukup bertele-tele dibandingkan dengan ==
)
untuk biziclop:
class Biziclop {
public static void main(String[] args) {
System.out.println(new Integer(5) == new Integer(5));
System.out.println(new Integer(500) == new Integer(500));
System.out.println(Integer.valueOf(5) == Integer.valueOf(5));
System.out.println(Integer.valueOf(500) == Integer.valueOf(500));
}
}
Hasil dalam:
false
false
true
false
EDIT Mengapa (3) kembali true
dan (4) kembali false
?
Karena mereka adalah dua objek yang berbeda. 256 bilangan bulat yang paling dekat dengan nol [-128; 127] di-cache oleh JVM, jadi mereka mengembalikan objek yang sama untuk mereka. Di luar rentang itu, mereka tidak di-cache, jadi objek baru dibuat. Untuk membuat segalanya menjadi lebih rumit, JLS menuntut setidaknya 256 bobot terbang di-cache. Implementer JVM dapat menambahkan lebih banyak jika mereka inginkan, yang berarti ini dapat berjalan pada sistem di mana 1024 terdekat di-cache dan semuanya kembali benar ... #awkward