Integer Java: Perbedaan Mendalam int dan Integer untuk Developer

目次

1. Pendahuluan

Dasar-dasar Tipe Data Integer di Java

Dalam Java, salah satu tipe data paling dasar untuk menangani angka adalah “tipe data integer (int)”. Ini adalah tipe data primitif yang sering digunakan saat melakukan perhitungan numerik dalam program, dan menggunakan tipe int memungkinkan pemrosesan yang efisien dalam hal memori dan kecepatan.

Di sisi lain, Java juga memiliki kelas “Integer”. Ini disebut wrapper class yang digunakan untuk menangani nilai tipe int sebagai objek, dan dibuat sesuai dengan filosofi desain berorientasi objek Java.

Kedua tipe ini tampak serupa, namun memiliki perbedaan yang jelas dalam tujuan penggunaan dan perilakunya. Oleh karena itu, bagi pemula Java, sering muncul pertanyaan seperti “Apa bedanya int dan Integer?” atau “Bagaimana cara menggunakannya secara selektif?”

Mengapa Perlu Mempelajari Kelas Integer?

Dalam Java, ada banyak situasi di mana tipe int tidak dapat menangani, seperti kerangka kerja koleksi (List, Map, dll.), penanganan nilai null, dan generik. Dalam situasi tersebut, kelas Integer menjadi sangat diperlukan, sehingga pemahaman dasar sangat penting.

Selain itu, kelas Integer menyediakan banyak metode yang berguna, memungkinkan implementasi sederhana untuk konversi string numerik, perbandingan, dan operasi bit. Dengan menguasai ini, Anda dapat menulis kode yang lebih kuat dan mudah dibaca.

Artikel ini akan fokus pada “kelas Integer”, menjelaskan perbedaannya dengan int, cara penggunaan konkret, dan skenario pemanfaatan. Informasi ini akan berguna tidak hanya bagi pemula tetapi juga bagi mereka yang sudah terbiasa dengan Java, jadi bacalah sampai selesai.

2. Apa itu Kelas Integer?

Peran sebagai Wrapper Class

Kelas Integer di Java adalah wrapper class yang memungkinkan tipe primitif int untuk diperlakukan sebagai objek. Wrapper, seperti namanya, adalah sesuatu yang membungkus sesuatu. Di sini, ini mengacu pada mekanisme untuk membungkus nilai mentah int ke dalam “kotak” Integer agar dapat diperlakukan sebagai objek.

Misalnya, koleksi Java (List, Map, dll.) pada dasarnya hanya dapat menangani objek. Tipe primitif seperti int tidak dapat digunakan secara langsung, sehingga Integer diperlukan sebagai gantinya.

List<Integer> numbers = new ArrayList<>();
numbers.add(10); // Nilai int 10 secara otomatis diubah menjadi Integer dan disimpan

Dengan demikian, dengan mengubah (boxing) int ke dalam bentuk objek dan menanganinya, dimungkinkan untuk berinteraksi dengan banyak API dan framework Java.

Autoboxing dan Unboxing

Sejak Java 5, mekanisme yang nyaman seperti “autoboxing” dan “unboxing” telah diperkenalkan.

  • Autoboxing: Nilai tipe int secara otomatis diubah menjadi tipe Integer
  • Unboxing: Objek tipe Integer secara otomatis diubah menjadi tipe int
Integer num = 100; // Autoboxing
int result = num + 50; // Unboxing dan operasi

Dengan cara ini, pengembang tidak perlu menulis kode konversi secara eksplisit, karena Java secara otomatis melakukan konversi tipe yang sesuai. Ini menyederhanakan kode dan meningkatkan keterbacaan.

Namun, perlu dicatat bahwa mencoba melakukan unboxing nilai null akan menyebabkan NullPointerException.

Integer value = null;
int x = value; // Pengecualian terjadi di sini

Makna di Balik Integer

Kelas Integer bukan hanya pengganti int. Karena merupakan objek, ia memiliki karakteristik berikut:

  • Dapat menangani null, sehingga dapat merepresentasikan status tidak tersetel
  • Sebagai kelas, ia memiliki metode dan memungkinkan operasi yang fleksibel
  • Dapat digunakan dalam struktur yang berbasis objek, seperti koleksi

Singkatnya, dalam konteks berorientasi objek Java, ada banyak situasi di mana Integer lebih cocok daripada int.

3. Bidang dan Konstanta Utama Kelas Integer

Kelas Integer di Java mendefinisikan konstanta berguna dan bidang untuk mengambil informasi terkait angka. Dengan memanfaatkan ini, Anda dapat meningkatkan keterbacaan dan pemeliharaan kode.

Di sini, kami akan menjelaskan bidang-bidang representatif yang sering digunakan.

MAX_VALUE dan MIN_VALUE

Integer.MAX_VALUE dan Integer.MIN_VALUE adalah konstanta yang masing-masing menunjukkan nilai maksimum dan nilai minimum yang dapat diambil oleh tipe int.

  • MAX_VALUE: 2,147,483,647 (2 pangkat 31 – 1)
  • MIN_VALUE: -2,147,483,648 (-2 pangkat 31)

Ini sering digunakan untuk pemeriksaan rentang dan pencegahan overflow, dan sangat diperlukan untuk pemrosesan numerik yang aman.

int max = Integer.MAX_VALUE;
int min = Integer.MIN_VALUE;

System.out.println("Nilai Maksimum: " + max); // 2147483647
System.out.println("Nilai Minimum: " + min); // -2147483648

SIZE dan BYTES

SIZE dan BYTES adalah konstanta yang menunjukkan jumlah bit dan jumlah byte yang digunakan oleh tipe int.

  • Integer.SIZE: 32 (jumlah bit)
  • Integer.BYTES: 4 (jumlah byte)

Ini sering digunakan dalam penanganan data biner dan aplikasi pemrograman sistem, dan sangat berguna untuk perhitungan ukuran data dan pemrosesan enkripsi.

System.out.println("Jumlah bit tipe int: " + Integer.SIZE);    // 32
System.out.println("Jumlah byte tipe int: " + Integer.BYTES); // 4

Bidang TYPE

Integer.TYPE adalah bidang statis yang mengembalikan objek Kelas tipe int. Ini digunakan dalam teknik pemrograman tingkat lanjut seperti refleksi dan generik.

Class<?> clazz = Integer.TYPE;
System.out.println(clazz.getName()); // int

Meskipun jarang digunakan dalam pengembangan sehari-hari, ini adalah pengetahuan yang tidak ada salahnya diketahui jika Anda tertarik dengan struktur internal Java dan pengembangan framework.

Semua konstanta ini didefinisikan sebagai static final dan dapat diakses langsung tanpa perlu membuat instance kelas Integer. Mengetahui informasi konstanta tentang tipe data Java adalah langkah pertama dalam mencegah kesalahan dan meningkatkan kinerja.

4. Metode Utama Kelas Integer

Kelas Integer bukan hanya sekadar pembungkus int. Ia dilengkapi dengan banyak metode praktis untuk konversi string, perbandingan numerik, operasi bit, dan lainnya, yang berguna dalam pengembangan Java sehari-hari. Di sini, kami akan memperkenalkan metode yang paling sering digunakan berdasarkan kategori.

Metode Konversi Numerik

parseInt()

parseInt() adalah metode statis yang mengubah string menjadi tipe int. Ini terutama digunakan saat menangani input pengguna atau data dari file eksternal sebagai angka.

String str = "123";
int number = Integer.parseInt(str); // 123

※ Jika string non-angka diteruskan, NumberFormatException akan terjadi, jadi aman untuk membungkusnya dengan try-catch.

valueOf()

valueOf() adalah metode yang mengubah string atau nilai tipe int menjadi objek Integer. Perbedaannya dengan parseInt() adalah nilai kembaliannya adalah Integer, bukan int.

Integer num1 = Integer.valueOf("456");
Integer num2 = Integer.valueOf(789);

Integer.valueOf() menggunakan kembali objek yang di-cache untuk nilai antara -128 dan 127, sehingga lebih efisien daripada pembuatan instance dengan new.

Metode Tampilan/Konversi

toString()

toString() adalah metode yang mengembalikan angka sebagai string. Ini sering digunakan saat menggabungkan string atau menampilkan ke layar.

int number = 100;
String str = Integer.toString(number); // "100"

Selain desimal, konversi ke biner, heksadesimal, dll., juga dimungkinkan.

System.out.println(Integer.toBinaryString(10));  // "1010"
System.out.println(Integer.toHexString(255));    // "ff"

Metode Terkait Perbandingan/Kesetaraan

compareTo()

compareTo() membandingkan dua objek Integer dan mengembalikan nilai integer yang menunjukkan hubungannya.

Integer a = 10;
Integer b = 20;

int result = a.compareTo(b); // -1 (nilai negatif jika a < b)

Ini sering digunakan bersama dengan Collections.sort dan lainnya.

equals()

equals() adalah metode yang menentukan apakah nilainya sama. Karena operator == membandingkan referensi, equals() direkomendasikan untuk menentukan kesetaraan antara objek.

Integer x = 100;
Integer y = 100;
System.out.println(x.equals(y)); // true

Metode Operasi Bit

Tidak seperti Java, kelas Integer juga memiliki dukungan yang kaya untuk operasi bit tingkat rendah.

bitCount()

Metode ini mengembalikan jumlah bit yang bernilai 1 dalam nilai int yang ditentukan.

int count = Integer.bitCount(15); // 15 dalam biner adalah 1111 → 4 bit 1 → 4

highestOneBit()

Metode ini mengembalikan nilai dengan hanya bit 1 tertinggi yang tersisa dalam nilai int yang ditentukan.

int highest = Integer.highestOneBit(10); // 10 (1010) → 8 (1000)

Ini sangat berguna untuk pemrosesan yang memerlukan optimasi melalui operasi bit.

Metode Berguna Lainnya

  • Integer.reverse(int): Membalikkan bit secara horizontal
  • Integer.signum(int): Menentukan tanda (positif: 1, negatif: -1, nol: 0)
  • Integer.hashCode(): Mendapatkan kode hash (penting saat menggunakan koleksi)

Ada banyak situasi di mana angka ditangani di Java, dan hanya dengan mengetahui metode ini, Anda dapat menulis kode yang elegan dan efisien. Terutama perbandingan, konversi, dan operasi bit sering digunakan dalam praktik, jadi ini adalah pengetahuan yang harus dikuasai.

5. Penggunaan int dan Integer yang Tepat

Di Java, ada dua tipe data yang merepresentasikan "integer": int dan Integer. Meskipun dapat saling dikonversi, penggunaan yang salah dapat menyebabkan penurunan kinerja atau kesalahan yang tidak terduga. Di sini, mari kita susun bagaimana seharusnya digunakan secara selektif, berdasarkan karakteristik masing-masing.

Perbedaan dari Sudut Pandang Kinerja

int adalah tipe primitif, dengan ukuran memori tetap (4 byte) dan operasi yang cepat. Di sisi lain, Integer adalah tipe objek, disimpan sebagai instance di memori heap, dan memiliki metode serta fungsionalitas tambahan.

int a = 10;
Integer b = 10;

Meskipun nilai yang sama ditetapkan seperti di atas, pemrosesan internal berbeda. Dalam perhitungan numerik dalam jumlah besar atau pemrosesan loop, penggunaan int jauh lebih menguntungkan dalam hal kecepatan pemrosesan dan penggunaan memori.

Contoh Nyata: Perbedaan Kecepatan Pemrosesan dalam Loop

long startTime = System.nanoTime();
int sum = 0;
for (int i = 0; i < 1000000; i++) {
    sum += i;
}
long endTime = System.nanoTime();
System.out.println("Waktu pemrosesan int: " + (endTime - startTime) + " ns");

Jika pemrosesan yang sama dilakukan dengan Integer, boxing dan unboxing akan terjadi, dan dalam beberapa kasus, bisa memakan waktu beberapa kali lipat.

Perbedaan dalam Nullability dan Penanganan Pengecualian

Tipe int tidak dapat menetapkan null. Oleh karena itu, tidak cocok untuk situasi di mana Anda ingin menunjukkan "apakah nilai tidak diatur atau tidak".

Integer value = null;
if (value == null) {
    System.out.println("Nilai tidak diatur");
}

Dengan demikian, menggunakan Integer memungkinkan penanganan status null secara eksplisit, sehingga cocok untuk situasi di mana status tidak diatur mungkin terjadi, seperti verifikasi input formulir atau pengambilan dari database.

Namun, perlu diingat bahwa NullPointerException akan terjadi jika null ada saat unboxing.

Kompatibilitas dengan Koleksi

Koleksi Java (List, Map, dll.) memiliki spesifikasi yang menyatakan bahwa hanya objek yang dapat disimpan. Oleh karena itu, int tidak dapat digunakan secara langsung, dan Integer harus digunakan.

List<Integer> numbers = new ArrayList<>();
numbers.add(100); // int otomatis diubah menjadi Integer

Selain itu, dalam kombinasi dengan generik, tipe primitif tidak dapat ditentukan sebagai argumen tipe, sehingga mau tidak mau Integer harus digunakan.

Ringkasan: Pedoman Penggunaan yang Tepat

Skenario PenggunaanTipe yang DirekomendasikanAlasan
Perhitungan numerik sebagai fokus utamaintPemrosesan cepat, efisien memori
Perlu menentukan apakah nilai "ada atau tidak ada"IntegerDapat menangani null
Digunakan bersama dengan koleksi atau generikIntegerTipe objek wajib
Ingin menggunakan Map dengan angka sebagai kunciIntegerint tidak dapat digunakan

Pada dasarnya, ingatlah **"int untuk kecepatan, Integer untuk fleksibilitas"**.

6. Kesalahan Umum dan Cara Mengatasinya

Terjadinya NullPointerException (NPE)

Penyebab:

Karena Integer adalah tipe objek, ia dapat diberi nilai null, tetapi saat mencoba memperlakukan null sebagai int saat unboxing, NullPointerException akan terjadi.

Integer value = null;
int x = value; // Pengecualian terjadi di sini
Solusi:

Penting untuk melakukan pemeriksaan null sebelum unboxing.

if (value != null) {
    int x = value;
} else {
    int x = 0; // Atur nilai default, dll.
}

Atau, ada cara untuk menangani dengan aman menggunakan Optional (Java 8 dan yang lebih baru).

int x = Optional.ofNullable(value).orElse(0);

NumberFormatException (Kesalahan Format Numerik)

Penyebab:

Pengecualian ini terjadi saat mencoba mengubah string yang bukan angka dengan Integer.parseInt() atau Integer.valueOf().

String input = "abc";
int num = Integer.parseInt(input); // NumberFormatException
Solusi:

Sertakan logika untuk memvalidasi apakah nilai input adalah angka terlebih dahulu. Umumnya dilakukan dengan ekspresi reguler.

if (input.matches("-?d+")) {
    int num = Integer.parseInt(input);
} else {
    System.out.println("Bukan angka");
}

Selain itu, perlu juga untuk menangani pengecualian dengan try-catch agar pemrosesan dapat berlanjut dengan aman.

try {
    int num = Integer.parseInt(input);
} catch (NumberFormatException e) {
    System.out.println("Format angka tidak valid: " + input);
}

 

Kesalahan Penggunaan == dan equals()

Penyebab:

Membandingkan objek Integer dengan == membandingkan referensinya, bukan nilainya, sehingga mungkin menghasilkan false meskipun nilainya sama.

Integer a = new Integer(128);
Integer b = new Integer(128);
System.out.println(a == b);        // false (referensi berbeda)
System.out.println(a.equals(b)); // true (nilai sama)

※ Untuk nilai dalam rentang -128 hingga 127, == mungkin menghasilkan true karena caching, tetapi ini adalah perilaku yang bergantung pada spesifikasi bahasa.

Solusi:

Saat membandingkan objek Integer, selalu gunakan .equals().

if (a.equals(b)) {
    System.out.println("Nilainya sama");
}

Ada juga cara untuk membandingkan dengan melakukan unboxing ke tipe primitif int.

if (a.intValue() == b.intValue()) {
    System.out.println("Sama sebagai nilai int");
}

Kelewatan Overflow

Penyebab:

int dan Integer hanya dapat menangani rentang 32-bit (±2.147.483.647), sehingga tidak akan berfungsi dengan benar jika melebihi rentang tersebut.

int a = Integer.MAX_VALUE;
int b = a + 1;
System.out.println(b); // -2,147,483,648 (kembali ke nilai negatif)
Solusi:

Pertimbangkan untuk menggunakan tipe long atau BigInteger jika perlu, dan upayakan implementasi yang sadar akan batas nilai.

Ringkasan

Integer adalah tipe data yang nyaman dan fleksibel, tetapi juga memiliki banyak hal yang perlu diperhatikan terkait null, referensi, dan konversi tipe. Terutama bagi pemula Java, memahami "mengapa pengecualian terjadi" sangatlah penting.

Dengan memahami kesalahan umum terlebih dahulu, Anda dapat mencegah bug dan menulis kode yang lebih stabil.

7. Contoh Praktis: Skenario Pemanfaatan Kelas Integer

Sejauh ini, Anda seharusnya sudah memahami fungsionalitas, penggunaan yang tepat, dan poin-poin yang perlu diperhatikan dari kelas Integer. Sekarang, mari kita perkenalkan bagaimana Integer benar-benar dimanfaatkan, sesuai dengan kasus penggunaan konkret di lapangan.

Konversi Numerik Input Pengguna

Dalam aplikasi web atau desktop, nilai input dari pengguna biasanya diterima sebagai string (String). Namun, item seperti usia atau kuantitas seringkali ingin diproses sebagai angka, dan Integer digunakan untuk konversi tersebut.

String input = "25"; // String yang diinput

try {
    Integer age = Integer.valueOf(input); // Konversi String → Integer
    System.out.println("Usia: " + age);
} catch (NumberFormatException e) {
    System.out.println("Input tidak valid");
}

Dengan cara ini, Anda dapat memvalidasi apakah nilai input adalah angka yang sesuai, dan jika ada masalah, lakukan penanganan pengecualian untuk mewujudkan pemrosesan input pengguna yang kuat.

Manajemen Nilai Pengaturan dan Variabel Lingkungan

Seringkali terjadi kasus di mana informasi pengaturan sistem atau konfigurasi dibaca sebagai string dari eksternal, lalu ditangani sebagai tipe integer. Khususnya saat menggunakan System.getProperty() dan sejenisnya, konversi dari string sangat diperlukan.

String maxConn = System.getProperty("app.maxConnections", "100");
int max = Integer.parseInt(maxConn);
System.out.println("Jumlah koneksi maksimum: " + max);

Dalam pemrosesan seperti ini, diperlukan upaya untuk memungkinkan perubahan pengaturan secara fleksibel sambil menentukan nilai default.

Operasi Numerik dalam Koleksi

Saat ingin menangani angka dalam koleksi (List, dll.), Integer diperlukan, bukan int. Contohnya adalah situasi di mana Anda ingin menyimpan sementara beberapa ID yang dimasukkan pengguna ke dalam daftar.

List<Integer> ids = new ArrayList<>();
ids.add(101);
ids.add(205);
ids.add(309);

for (Integer id : ids) {
    System.out.println("ID yang sedang diproses: " + id);
}

Dalam situasi seperti ini, autoboxing secara otomatis mengubah int menjadi Integer, memungkinkan pengembang untuk menulis kode yang ringkas tanpa harus menyadarinya.

Manajemen Bendera Menggunakan Operasi Bit

Kelas Integer juga memiliki metode operasi bit yang kaya, dan dapat diterapkan untuk manajemen bendera tingkat rendah atau transisi status.

int flags = 0;

// Set bit ke-1 (aktifkan)
flags |= 0b0001;

// Set bit ke-2
flags |= 0b0010;

// Cek apakah bit ke-2 aktif
boolean isSet = (flags & 0b0010) != 0;

System.out.println("Bit ke-2: " + (isSet ? "ON" : "OFF"));

Selain itu, Anda dapat memvisualisasikan status bendera menggunakan Integer.toBinaryString(flags).

System.out.println("Status bendera saat ini: " + Integer.toBinaryString(flags));

Integrasi dengan Database

Saat berinteraksi dengan database menggunakan JDBC dan sejenisnya, menggunakan Integer daripada int untuk kolom tipe numerik memiliki keuntungan dapat menangani nilai null dengan aman.

ResultSet rs = stmt.executeQuery("SELECT age FROM users WHERE id = 1");

if (rs.next()) {
    Integer age = (Integer) rs.getObject("age");
    System.out.println(age != null ? "Usia: " + age : "Usia belum terdaftar");
}

Karena tipe primitif int tidak dapat menerima null, di sini tipe objek Integer lebih cocok.

Ringkasan

Kelas Integer, lebih dari sekadar wrapper int, memainkan peran besar dalam pemrosesan data yang fleksibel dan memastikan keamanan di lapangan. Terutama dalam situasi berikut, pemanfaatan Integer sangat efektif:

  • Konversi numerik input pengguna atau pengaturan eksternal
  • Penanganan data yang mungkin memiliki nilai null
  • Penanganan integer dalam koleksi
  • Manajemen status menggunakan operasi bit

Jika digunakan dengan tepat, Anda dapat meningkatkan **ekstensibilitas, pemeliharaan, dan stabilitas** kode.

8. Ringkasan

Kelas Integer di Java bukanlah sekadar pengganti int, melainkan kelas penting yang terkait erat dengan sifat berorientasi objek dari bahasa Java. Artikel ini telah menjelaskan poin-poin berikut dengan cara yang mudah dipahami bagi pemula, termasuk konten praktis:

Apa Keuntungan Kelas Integer?

  • Dapat ditangani sebagai objek, memungkinkan penanganan null dan integrasi dengan koleksi
  • Dilengkapi dengan banyak metode yang berguna (konversi string, perbandingan, operasi bit, dll.)
  • Kompatibilitas yang baik dengan System.getProperty() dan operasi DB, memungkinkan desain yang fleksibel
  • Mekanisme caching dan kesederhanaan penulisan berkat autoboxing

Ini adalah kekuatan yang tidak dapat diperoleh dari tipe primitif int.

Namun, ada Poin-poin yang Perlu Diperhatikan

  • Melakukan unboxing null akan menyebabkan NullPointerException
  • Operator == mungkin tidak membandingkan seperti yang diharapkan dalam beberapa kasus
  • Untuk pemrosesan besar, int lebih baik dalam hal kinerja

Jika Anda menggunakan tipe data ini tanpa memahami karakteristiknya, Anda berisiko menyebabkan bug atau masalah kinerja yang tidak terduga.

Penggunaan yang Tepat itu Penting

Skenario PenggunaanTipe yang DirekomendasikanAlasan
Saat dibutuhkan pemrosesan numerik yang cepatintEfisiensi memori dan kecepatan operasi lebih baik
Data yang mungkin memiliki nullIntegerDapat menangani null, penanganan aman
Digunakan bersama dengan koleksi atau generikIntegerTipe objek wajib
Ingin menggunakan Map dengan angka sebagai kunciIntegerint tidak dapat digunakan

Dengan demikian, int dan Integer **bukan hanya perbedaan tipe data, tetapi juga memerlukan pilihan yang tepat sesuai dengan kebijakan desain dan tujuan pemrosesan**.

Terakhir

Memahami Integer bukan hanya tentang penanganan tipe data di Java, tetapi juga menjadi dasar bagi keterampilan pemrograman yang lebih dalam, seperti orientasi objek, penanganan pengecualian, dan optimasi kinerja.

Bagi pemula, karena ini adalah tipe data numerik yang sering ditangani sehari-hari, memahaminya secara cermat sejak dini akan sangat membantu dalam pengembangan Java di masa mendatang.

Pertanyaan yang Sering Diajukan (FAQ)

Q1. Apa perbedaan antara int dan Integer?

A. int adalah tipe primitif di Java, digunakan untuk menangani bilangan bulat dasar dengan cepat dan efisien memori. Sementara itu, Integer adalah wrapper class yang memungkinkan int diperlakukan sebagai objek, dapat menangani null, dan memungkinkan berbagai operasi menggunakan metode. Misalnya, ketika menyimpan ke koleksi atau ketika ingin membedakan apakah suatu nilai belum diatur, Integer adalah pilihan yang tepat.

Q2. Apa perbedaan antara parseInt() dan valueOf()?

A. Keduanya adalah metode untuk mengubah string menjadi angka, tetapi tipe kembaliannya berbeda.

  • parseInt(String s) → mengembalikan int (tipe primitif)
  • valueOf(String s) → mengembalikan Integer (tipe objek)

Gunakan sesuai tujuan Anda. valueOf() sangat berguna jika Anda ingin menyimpan sebagai objek atau jika Anda perlu menangani null.

Q3. Mengapa tidak boleh membandingkan objek Integer dengan ==?

A. Operator == membandingkan referensi objek, sehingga meskipun nilai numeriknya sama, jika instansinya berbeda, hasilnya akan false. Hal ini cenderung menghasilkan hasil yang tidak terduga, terutama untuk nilai di atas 128 di mana caching tidak berlaku. Selalu gunakan .equals() untuk membandingkan nilai.

Integer a = 128;
Integer b = 128;
System.out.println(a == b);        // false (referensi berbeda)
System.out.println(a.equals(b)); // true (nilai sama)

Q4. Apa yang terjadi jika null diberikan ke Integer?

A. Karena Integer adalah tipe objek, dimungkinkan untuk menetapkan null. Namun, jika ada null saat secara otomatis dikonversi (unboxing) ke int, NullPointerException akan terjadi.

Integer val = null;
int num = val; // Pengecualian terjadi di sini

Tangani dengan melakukan pemeriksaan null terlebih dahulu, atau gunakan Optional untuk desain yang aman.

Q5. Bagaimana cara mengetahui nilai maksimum/minimum Integer?

A. Di Java, Anda dapat dengan mudah mendapatkan rentang masing-masing menggunakan Integer.MAX_VALUE dan Integer.MIN_VALUE.

System.out.println(Integer.MAX_VALUE); // 2147483647
System.out.println(Integer.MIN_VALUE); // -2147483648

Ini dapat digunakan untuk pemeriksaan rentang dan penanganan overflow.

Q6. Mengapa int tidak dapat digunakan dalam koleksi?

A. Koleksi Java (List, Map, dll.) dirancang hanya untuk menangani objek, sehingga tipe primitif int tidak dapat digunakan secara langsung. Oleh karena itu, Integer harus digunakan sebagai gantinya.

List<Integer> list = new ArrayList<>();
list.add(123); // Secara otomatis dikonversi dari int → Integer

Q7. Dari segi performa, mana yang lebih baik antara int dan Integer?

A. Untuk pemrosesan perhitungan yang cepat atau menangani sejumlah besar angka dalam loop, int jauh lebih cepat dan hemat memori. Integer unggul dalam kenyamanan dan fleksibilitas, tetapi tidak cocok untuk pemrosesan berat karena menghasilkan pembuatan objek yang tidak perlu dan boxing.