CodeGym /Java Course /Modul 1 /Kelas pembungkus secara rinci

Kelas pembungkus secara rinci

Modul 1
Level 16 , Pelajaran 1
Tersedia

1. Integerkelas

Integerjuga bagus karena merupakan kelas, yang artinya dapat memiliki bidang dan metode. Dan, tentu saja, memiliki mereka. Banyak dari mereka - lusinan. Di sini kita akan mempertimbangkan yang paling dasar.

Kelas Integermemiliki dua bidang yang berisi nilai maksimum dan minimum yang mungkin dari inttipe tersebut:

Bidang Keterangan
Integer.MAX_VALUE
Nilai maksimum yang mungkin dari inttipe tersebut
Integer.MIN_VALUE
Nilai minimum yang mungkin dari inttipe tersebut

Terkadang Anda ingin menetapkan intnilai terkecil atau terbesar yang mungkin ke suatu variabel. Untuk menghindari mengacaukan kode Anda dengan konstanta yang tidak dapat dipahami, Anda dapat menulis ini dengan sangat jelas sebagai berikut:

Kode Keterangan
int min = Integer.MIN_VALUE;
min == 0x80000000

Kelas Integerjuga memiliki beberapa metode yang menarik. Di sini mereka:

Metode Keterangan
String Integer.toHexString(int)
Mengembalikan string yang merupakan representasi angka heksadesimal
String Integer.toBinaryString(int)
Mengembalikan string yang merupakan representasi biner dari angka tersebut
String Integer.toOctalString(int)
Mengembalikan string yang merupakan representasi oktal dari angka tersebut
Integer Integer.valueOf(int i)
Membungkus yang diteruskan intdalam suatu Integerobjek
Integer Integer.parseInt(String)
Mengembalikan nomor yang diperoleh dari string yang diteruskan

Anda sebelumnya menemukan metode statis Integer.parseInt(). Mari kita ingat cara kerjanya:

int name = Integer.parseInt(string);

Jika sebuah string yang berisi angka (hanya angka) diteruskan ke metode parseInt(), itu akan mengurai string dan mengembalikan nomor yang dikandungnya.

Metode lainnya juga berguna. Misalnya, beberapa dari mereka dapat mengonversi angka yang diteruskan ke string yang berisi representasi angka biner, oktal, atau heksadesimal.



2. Doublekelas

Secara umum, Doubleclass ini mirip dengan Integerclass, hanya membungkus a double, bukan int. Itu juga memiliki bidang dan metode yang akan menarik bagi kita. Pertimbangkan beberapa di antaranya:

Kelas Doublememiliki enam bidang menarik:

Bidang Keterangan
double Double.NEGATIVE_INFINITY
Tak terhingga negatif
double Double.POSITIVE_INFINITY
Tak terhingga positif
int Double.MIN_EXPONENT
Eksponen minimum yang mungkin (2 x )
int Double.MAX_EXPONENT
Eksponen maksimum yang mungkin (2 x )
double Double.MIN_VALUE
Nilai minimum yang mungkin dari doubletipe tersebut
double Double.MAX_VALUE
Nilai maksimum yang mungkin dari doubletipe tersebut

Ketakterbatasan

Jika Anda membagi -1.0dengan 0.0, Anda mendapatkan infinity negatif. Jika Anda membagi 1.0dengan 0.0, Anda mendapatkan infinity positif. Anda tidak hanya dapat membagi a doubledengan nol, tetapi Anda juga dapat menggunakannya untuk menyimpan hasil operasi ini.

Eksponen dari adouble

Memahami eksponen itu mudah. Secara internal, ganda terdiri dari mantissa dan eksponen. Tapi di sini nilai eksponennya bukan , tapi . Jadi, jika eksponen meningkat sebesar , nilai total bilangan tersebut akan berlipat ganda.10x2x1

MIN_EXPONENT == -1024, yang berarti , yang kira-kira sama dengan2-102410-308

Dan tentu saja, Doublekelas tersebut memiliki metode yang menarik:

Metode Keterangan
String Double.toHexString(double)
Mengembalikan string yang merupakan representasi angka heksadesimal
boolean Double.isInfinite(double)
Memeriksa apakah nomor yang diteruskan adalah tak terhingga.
boolean Double.isNaN(double)
Memeriksa apakah nomor yang lulusNaN
Double Double.valueOf(double)
Membungkus yang diteruskan doubledalam sebuah Doubleobjek
Double Double.parseDouble(String)
Mengembalikan nomor yang diperoleh dari string yang diteruskan

Menariknya, ada isInfinite()metode yang mengembalikan truejika bilangan yang dilewatkan adalah bilangan tak terhingga positif atau negatif.

Metodenya isNaN()serupa — ia memeriksa apakah angka yang diteruskan adalah NaN( Not-a-Number , konstanta khusus yang menunjukkan nilai yang tidak ditentukan).



3. Characterkelas

Kelas ini Charactermenarik terutama karena banyaknya metode utilitas statis yang memungkinkan Anda memeriksa apakah karakter termasuk dalam berbagai kategori.

Contoh

Metode Keterangan
Character.isAlphabetic(int)
Memeriksa apakah suatu karakter adalah karakter abjad
Character.isLetter(char)
Memeriksa apakah karakter adalah huruf
Character.isDigit(char)
Memeriksa apakah karakter adalah angka
Character.isSpaceChar(char)
Memeriksa apakah karakter berupa spasi, jeda baris, atau jeda halaman (kode: 12, 13, 14)
Character.isWhitespace(char)
Memeriksa apakah karakternya adalah spasi putih: spasi, tab, dll.
Character.isLowerCase(char)
Memeriksa apakah karakternya huruf kecil
Character.isUpperCase(char)
Memeriksa apakah karakter huruf besar
Character.toLowerCase(char)
Mengubah karakter menjadi huruf kecil
Character.toUpperCase(char)
Mengubah karakter menjadi huruf besar

Fitur dari metode ini adalah mereka bekerja dengan semua huruf yang dikenal: angka Arab diklasifikasikan sebagai angka, dll.



4. Booleankelas

Jenisnya Booleanhampir sama dengan jenisnya boolean. Perbedaannya minimal.

Di bawah ini kami menunjukkan versi kelas yang disederhanakan Boolean:

Kode Keterangan
class Boolean
{
   public static final Boolean TRUE = new Boolean(true);
   public static final Boolean FALSE = new Boolean(false);

   private final boolean value;

   public Boolean(boolean value)
   {
      this.value = value;
   }

   public boolean booleanValue()
   {
      return value;
   }

   public static Boolean valueOf(boolean value)
   {
      return (value ? TRUE : FALSE);
   }
}


Konstanta: TRUEи Konstruktor kelas FALSE


variabel Metode mengembalikan nilai variabel internal Metode statis ini diubah menjadi dan menjadi .

Boolean








trueTRUEfalseFALSE

Jenisnya Booleanmemiliki dua konstanta (dua bidang):

Konstanta kelas Mitra untuk tipe boolean Keterangan
Boolean.TRUE
true
BENAR
Boolean.FALSE
false
PALSU

Anda dapat bekerja dengan mereka dengan cara yang sama seperti Anda bekerja dengan tipe boolean:

Kode Catatan
if (Boolean.TRUE)
{
}
Kelas Booleanadalah satu-satunya kelas yang dapat ditulis di dalam suatu kondisi
Boolean a = Boolean.TRUE;
boolean b = Boolean.TRUE;
boolean c = true;
Ketiga variabel tersebut sama dengan true/TRUE
Boolean a = Boolean.TRUE;
Boolean b = Boolean.TRUE;
if (a == b)
Konstanta dapat dibandingkan menggunakan keduanya equalsdan ==

Ini juga akan berfungsi.

Autoboxing berfungsi dengan baik di sini. Artinya, Anda dapat menggunakan jenis ini dengan cara yang sama seperti jenisnya boolean— tidak ada jebakan yang harus diwaspadai.

Bagaimana itu ditulis Bagaimana itu bekerja
Boolean a = true;
Boolean b = true;
Boolean c = false;
boolean d = a;
Boolean a = Boolean.valueOf(true);
Boolean b = Boolean.valueOf(true);
Boolean c = Boolean.valueOf(false);
boolean d = a.booleanValue();

Dan di sini perbandingan dari booleandan Booleanjenis:

boolean a = true;
Boolean b = true; // b will be equal to Boolean.TRUE
Boolean c = true; // c will be equal to Boolean.TRUE

a == b; // true (compared by value)
a == c; // true (compared by value)
b == c; // true (compared by reference, but they point to the same object)

Jika Anda benar-benar membutuhkan Booleanobjek independen, maka Anda perlu membuatnya secara eksplisit:

boolean a = true;
Boolean b = new Boolean(true); // New Boolean object
Boolean c = true; // c will be equal to Boolean.TRUE

a == b; // true (compared by value)
a == c; // true (compared by value)
b == c; // false (compared by reference, and they point to different objects)

Satu lagi contoh, di mana kita akan menggunakan Booleanbagian dalam dari if:

Kode Catatan
Boolean less = (2 < 3);
if (less)
{
   ...
}
Ini akan mengkompilasi dan bekerja

Ini akan dikompilasi, tetapi tidak akan berhasil!

Kode Catatan
Boolean less = null;
if (less)
{
   ...
}

Kesalahan . Baris ini akan menampilkan pengecualian


5. Menyimpan nilai selama autoboxing

Ada beberapa jebakan yang terkait dengan tipe pembungkus bilangan bulat.

Seperti yang sudah Anda ketahui, jika kita membandingkan an intdan an Integer, maka Integerdikonversi menjadi an int:

Bagaimana itu ditulis Bagaimana itu bekerja
int a = 5;
Integer b = 5;
if (a == b)
{
   ...
}
int a = 5;
Integer b = Integer.valueOf(5);
if (a == b.intValue())
{
   ...
}

Jika Anda membandingkan dua Integerobjek satu sama lain, keduanya tidak dikonversi menjadi ints:

Kode Keluaran konsol
Integer a = 500;
Integer b = 500;
int c = 500;

System.out.println(a == b); // Compared by reference
System.out.println(a == c);
System.out.println(b == c);




false
true
true

a == cdan , tetapi , karena ketika kita membandingkan dan kita membandingkan referensi. Yang pada dasarnya adalah apa yang kita harapkan.b == ca != bab

Kejutan

Tetapi jika kita mengganti 500dengan 100, maka kita mendapatkan hasil yang sama sekali berbeda:

Kode Keluaran konsol
Integer a = 100;
Integer b = 100;
int c = 100;

System.out.println(a == b); // Compared by reference
System.out.println(a == c);
System.out.println(b == c);




true
true
true

Masalahnya di sini adalah bahwa objek baru tidak selalu benar-benar dibuat selama autoboxingInteger . Objek di-cache untuk nilai -128melalui 127inklusif.

Kelas Integermemiliki array tersembunyi yang menyimpan objek: Integer(-128), Integer(-127), ... Integer(126),Integer(127)

Jika Anda menulis Integer x = 128, maka proses autoboxing membuat objek baru, tetapi jika Anda menulis Integer x = 127, maka proses autoboxing mengambil objek yang ada dari cache (dari array).

Jika Anda tidak ingin Integerobjek berasal dari cache, Anda harus membuatnya secara eksplisit dengan menulis:Integer x = new Integer(127);

Semua jenis pembungkus memiliki cache seperti itu: Integer, Long, Byte, Short, Boolean. Untuk Booleanjenisnya, TRUEdan FALSEnilainya adalah konstanta, jadi keduanya juga di-cache.


Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION