Walaupun pengenalan tinju dan unboxing dalam Java 5, pembangun terus menggunakan jenis primitif dalam kod mereka. Ini mungkin kelihatan berlawanan dengan intuitif memandangkan kemudahan tambahan yang ditawarkan oleh jenis kotak, tetapi terdapat beberapa faedah ketara untuk menggunakan primitif.
Pertimbangan Prestasi
Sorotan "Effective Java" Joshua Bloch potensi kesan prestasi menggunakan Long dan bukannya panjang dalam pengiraan mudah. Operasi tinju dan nyahbox melibatkan pengagihan dan penyerahan objek, yang boleh memperlahankan pelaksanaan kod. Seperti yang ditunjukkan dalam contoh yang diberikan, menggunakan jenis primitif boleh mengurangkan masa jalan dengan ketara.
Kesaksamaan Nilai
Satu lagi kelebihan jenis primitif ialah tanggapan asal mereka tentang kesamaan nilai. Operator == membandingkan nilai secara langsung, manakala kaedah .equals() pada jenis berkotak memerlukan langkah tambahan dan overhed. Ini boleh membawa kepada kod yang lebih ringkas dan cekap, terutamanya dalam senario kritikal prestasi.
Implikasi Caching
Di Java, nilai integer kecil ([-128; 127] ) dicache oleh JVM. Ini bermakna objek yang sama dikembalikan untuk nilai ini, yang boleh meningkatkan prestasi berbanding menggunakan jenis kotak. Walau bagaimanapun, untuk nilai di luar julat ini, objek baharu dicipta, berpotensi memperkenalkan objek yang tidak perlu di atas kepala.
Contoh: Teka-teki "Biziclop"
Gelagat .equals( ) untuk integer berkotak boleh mengelirukan. Pertimbangkan kod berikut:
class Biziclop { public static void main(String[] args) { System.out.println(new Integer(5) == new Integer(5)); // false System.out.println(new Integer(500) == new Integer(500)); // false System.out.println(Integer.valueOf(5) == Integer.valueOf(5)); // true System.out.println(Integer.valueOf(500) == Integer.valueOf(500)); // false } }
Mengapa baris (3) mengembalikan benar dan baris (4) mengembalikan palsu? Jawapannya terletak pada mekanisme caching. Nilai 5 dan -5 dicache oleh JVM, jadi dua contoh Integer(5) baharu merujuk kepada objek yang sama. Walau bagaimanapun, 500 tidak dicache, jadi dua contoh Integer(500) baharu ialah objek yang berbeza. Integer.valueOf(), sebaliknya, menggunakan cache tambahan yang merangkumi semua integer, memastikan bahawa untuk nilai dalam cache ini (biasanya semua integer dalam julat [-128; 127]), objek yang sama dikembalikan.
Atas ialah kandungan terperinci Mengapa Pembangun Java Memilih Jenis Primitif Daripada Kelas Pembungkus?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!