- apa itu kelas pembungkus;
- pengepakan otomatis/pembongkaran primitif;
- pengoperasian kelas Integer, metode dan konstanta.
Kelas pembungkus tipe primitif
Seperti yang Anda ketahui, Java memiliki tipe data yang berbeda-beda, yang dapat dibagi menjadi dua blok:- primitif;
- referensi.
- bilangan bulat - byte, pendek, int, panjang;
- angka floating point (nyata) - float, double;
- tipe data logis - boolean;
- tipe data karakter - char.
Tipe primitif | Kelas pembungkus |
---|---|
byte | byte |
pendek | Pendek |
ke dalam | Bilangan bulat |
panjang | Panjang |
mengambang | Mengambang |
dobel | Dobel |
boolean | Boolean |
arang | Karakter |
Bilangan Bulat
Kelas Integer adalah kelas pembungkus dari tipe primitif int. Kelas ini berisi satu bidang bertipe int. Sebagai kelas pembungkus, Integer menyediakan berbagai metode untuk bekerja dengan int, serta sejumlah metode untuk mengubah int menjadi String dan String menjadi int. Di bawah ini kita akan melihat berbagai contoh bekerja dengan kelas. Mari kita mulai dengan penciptaan. Yang paling umum digunakan (dan paling mudah digunakan) adalah opsi pembuatan berikut:
Integer a = 3;
Artinya, inisialisasi variabel Integer dalam hal ini mirip dengan inisialisasi variabel int. Selain itu, variabel Integer dapat diinisialisasi dengan nilai variabel int:
int i = 5;
Integer x = i;
System.out.println(x); // 5
Dalam kasus di atas, pengepakan otomatis terjadi secara implisit. Kami akan membicarakannya lebih lanjut di bawah. Selain opsi inisialisasi yang tercantum di atas, variabel Integer dapat dibuat seperti objek lainnya, menggunakan konstruktor dan kata kunci new:
Integer x = new Integer(25);
System.out.println(x);
Namun, dibutuhkan waktu lebih lama untuk menulis dan lebih lama untuk membaca, jadi opsi ini paling tidak umum. Anda dapat melakukan semuanya dengan variabel Integer seperti yang dapat Anda lakukan dengan variabel int. Mereka bisa menjadi:
Melipat |
|
Mengurangi |
|
Berkembang biak |
|
Membagi |
|
Kenaikan |
|
Pengurangan |
|
Integer a = null;
Integer b = a + 1; // Здесь мы упадем с "Exception in thread "main" java.lang.NullPointerException"
System.out.println(b);
Sebagian besar operasi perbandingan dilakukan dengan cara yang sama seperti pada tipe primitif int:
Integer a = 1;
Integer b = 2;
System.out.println(a > b);
System.out.println(a >= b);
System.out.println(a < b);
System.out.println(a <= b);
Keluaran:
false
false
true
true
Operasi membandingkan dua variabel Integer menonjol. Dan intinya di sini Integer adalah tipe data referensi, dan variabelnya menyimpan referensi ke nilai, dan bukan nilai itu sendiri (objek). Manifestasi dari fakta ini dapat diamati ketika mengeksekusi potongan kode berikut:
Integer a = 1;
Integer b = 1;
Integer c = new Integer(1);
System.out.println(a == b); // true
System.out.println(a == c); // false
Hasil persamaan pertama akan benar, dan persamaan kedua salah. Hal ini terjadi karena dalam kasus pertama kita membandingkan dua variabel (“a” dan “b”) yang menyimpan referensi ke objek yang sama. Dan dalam kasus kedua, kita membandingkan dua variabel yang merujuk ke dua objek berbeda (saat membuat variabel “c” kita membuat objek baru). Mari kita berikan contoh menarik lainnya:
Integer a = 1;
Integer b = 1;
Integer x = 2020;
Integer y = 2020;
System.out.println(a == b); // true
System.out.println(x == y); // false
Seperti yang bisa kita lihat, hasil perbandingan pertama benar, dan hasil perbandingan kedua salah. Ini semua tentang cache. Semua bilangan bulat dalam rentang -128 hingga 127 inklusif (nilai ini dapat disesuaikan) di-cache. Jadi ketika kita membuat variabel baru dan menetapkan nilai integer antara -128 dan 127, kita tidak membuat objek baru, melainkan menugaskan variabel tersebut sebagai referensi ke objek yang sudah dibuat di cache. Nah, mengetahui fakta tersebut, contoh di atas sepertinya tidak terlalu mistis. Variabel a dan b merujuk pada objek yang sama – objek dari cache. Dan selama inisialisasi variabel x dan y, kami membuat objek baru setiap kali, dan variabel ini menyimpan referensi ke objek berbeda. Dan seperti yang Anda ketahui, operator == membandingkan nilai variabel, dan nilai variabel referensi adalah referensinya. Untuk memeriksa kesetaraan antara dua variabel Integer secara akurat, Anda harus menggunakan (tidak peduli seberapa sepele kedengarannya) metode yang sama. Mari kita tulis ulang contoh di atas:
Integer a = 1;
Integer b = 1;
Integer x = 2020;
Integer y = 2020;
System.out.println(a.equals(b)); // true
System.out.println(x.equals(y)); // true
Mengemas otomatis dan membongkar Integer
Apa itu pengepakan dan pembongkaran otomatis? Saat membuat variabel Integer baru, kami menggunakan konstruksi berikut:Integer a = 2020;
Dengan cara ini kita membuat objek baru tanpa menggunakan operator kunci baru. Hal ini dimungkinkan berkat mekanisme autopacking tipe primitif int. Prosedur sebaliknya terjadi ketika menugaskan variabel int primitif ke nilai variabel referensi Integer:
Integer a = 2020;
int x = a;
Dalam hal ini, kita tampaknya telah menetapkan referensi (yaitu, referensi ke suatu objek adalah nilai variabel “a”) ke variabel primitif. Namun nyatanya, berkat mekanisme auto-unpacking, nilai 2020 dituliskan ke variabel “x”. Auto-packing/unpacking adalah fenomena yang sangat umum di Java. Seringkali hal ini terjadi dengan sendirinya, terkadang bahkan tanpa sepengetahuan pemrogram. Namun Anda tetap perlu mewaspadai fenomena ini. Kami memiliki artikel menarik tentang topik ini di Javarush .
Konstanta kelas bilangan bulat
Kelas Integer menyediakan berbagai konstanta dan metode untuk bekerja dengan bilangan bulat. Pada bagian ini kita akan melihat lebih dekat beberapa di antaranya dalam praktiknya. Mari kita mulai dengan konstanta. Tabel di bawah ini menunjukkan semua konstanta kelas:Kostanta | Keterangan |
---|---|
UKURAN | Jumlah bit pada sistem bilangan dua digit yang ditempati dengan tipe int |
BYTE | Jumlah byte dalam sistem bilangan dua digit yang ditempati oleh tipe int |
MAX_VALUE | Nilai maksimum yang dapat ditampung oleh tipe int |
MIN_VALUE | Nilai minimum yang dapat ditampung oleh tipe int |
JENIS | Mengembalikan objek bertipe Kelas dari tipe int |
public static void main(String[] args) {
System.out.println(Integer.SIZE);
System.out.println(Integer.BYTES);
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);
System.out.println(Integer.TYPE);
}
Hasilnya, kami mendapatkan keluaran berikut:
32
4
2147483647
-2147483648
int
Metode kelas Integer
Sekarang mari kita lihat sekilas metode kelas Integer yang paling sering digunakan. Jadi, yang "atas" dipimpin oleh metode untuk mengonversi angka dari string, atau mengonversi string dari angka. Mari kita mulai dengan mengubah string menjadi angka. Metode parseInt digunakan untuk tujuan ini , tanda tangannya di bawah:-
static int parseInt(String s)
int i = Integer.parseInt("10");
System.out.println(i); // 10
Jika konversi tidak memungkinkan—misalnya, kita meneruskan kata ke metode parseInt—NumberFormatException akan dilempar. Metode parseInt(String s) memiliki saudara yang kelebihan beban:
-
static int parseInt(String s, int radix)
System.out.println(Integer.parseInt("0011", 2)); // 3
System.out.println(Integer.parseInt("10", 8)); // 8
System.out.println(Integer.parseInt("F", 16)); // 15
Metode parseInt mengembalikan tipe data primitif int. Metode ini memiliki analog - metode valueOf . Beberapa variasi metode ini cukup memanggil parseInt secara internal. Bedanya dengan parseInt adalah hasil dari valueOf akan berupa Integer, bukan int. Mari kita lihat semua opsi untuk metode ini dan contoh cara kerjanya di bawah ini:
- static Integer valueOf(int i) - mengembalikan Integer yang nilainya i;
- static Integer valueOf(String s) - mirip dengan parseInt(String s), tetapi hasilnya adalah Integer;
- static Integer valueOf(String s, int radix) - mirip dengan parseInt(String s, int radix), tetapi hasilnya adalah Integer.
int a = 5;
Integer x = Integer.valueOf(a);
Integer y = Integer.valueOf("20");
Integer z = Integer.valueOf("20", 8);
System.out.println(x); // 5
System.out.println(y); // 20
System.out.println(z); // 16
Kami melihat metode yang memungkinkan Anda mengonversi String ke int/Integer. Prosedur sebaliknya dicapai dengan menggunakan metode toString . Anda dapat memanggil metode toString pada objek Integer mana pun dan mendapatkan representasi stringnya:
Integer x = 5;
System.out.println(x.toString()); // 5
Namun, karena metode toString sering dipanggil secara implisit pada objek (misalnya, saat mengirim objek ke konsol untuk dicetak), metode ini jarang digunakan secara eksplisit oleh pengembang. Ada juga metode statis toString, yang mengambil parameter int dan mengubahnya menjadi representasi string. Misalnya:
System.out.println(Integer.toString(5)); // 5
Namun, seperti metode toString non-statis, penggunaan metode statis secara eksplisit jarang terjadi. Yang lebih menarik adalah metode statis toString, yang mengambil 2 parameter integer:
- static String toString(int i, int radix) - akan mengonversi i menjadi representasi string dalam sistem bilangan radix.
System.out.println(Integer.toString(5, 2)); // 101
Kelas Integer memiliki beberapa metode untuk mencari maksimum/minimum dari dua bilangan:
- static int max(int a, int b) akan mengembalikan nilai terbesar di antara variabel yang diteruskan;
- static int min(int a, int b) akan mengembalikan nilai terkecil di antara variabel yang diteruskan.
int x = 4;
int y = 40;
System.out.println(Integer.max(x,y)); // 40
System.out.println(Integer.min(x,y)); // 4
Kesimpulan
Pada artikel ini kita melihat kelas Integer. Kami berbicara tentang jenis kelas ini dan apa kelas pembungkusnya. Kami melihat kelas dari sudut pandang praktis. Kita melihat contoh operasi aritmatika, termasuk operasi perbandingan. Kami melihat seluk-beluk membandingkan dua variabel Integer, dan memeriksa konsep objek yang di-cache. Kami juga menyebutkan fenomena pengepakan/pembongkaran otomatis tipe data primitif. Selain itu, kami berhasil melihat beberapa metode kelas Integer, serta beberapa konstanta. Mereka memberikan contoh konversi bilangan dari satu sistem bilangan ke sistem bilangan lainnya.Pekerjaan rumah
-
Pelajari metode lain dari kelas Integer yang ada (Anda dapat mempelajarinya di situs web dengan dokumentasi resmi ), tulis di komentar metode mana yang telah Anda pelajari (tidak termasuk yang diberikan dalam artikel) yang paling berguna menurut Anda ( akan paling sering Anda gunakan). Dan berikan juga alasan pendapat anda.
PS Tidak ada jawaban yang benar di sini, tetapi kegiatan ini akan memungkinkan Anda mempelajari kelas dengan lebih baik.
-
Selesaikan masalah kecil sederhana untuk mengkonsolidasikan materi.
Kami memiliki dua nomor:
1100001001 - dalam sistem bilangan biner
33332 - dalam sistem bilangan kuinerHal ini diperlukan, hanya dengan menggunakan metode kelas Integer, untuk menentukan nilai maksimum di antara dua bilangan tertentu, dan kemudian menampilkan perbedaan antara nilai maksimum dan minimum dalam sistem bilangan terner.
-
Konversikan nilai Integer maksimum yang mungkin ke sistem bilangan oktal dan tampilkan jumlah digit dalam bilangan yang dihasilkan (hitung bilangan tersebut secara terprogram).
GO TO FULL VERSION