1. Senarai jenis pembalut

Anda tahu bahawa Java mempunyai 8 jenis primitif, iaitu jenis yang bukan kelas. Di satu pihak, ini bagus — ia ringkas dan mengambil sedikit ruang. Sebaliknya, kadangkala kelas adalah apa yang kita perlukan. Anda akan mengetahui dengan tepat mengapa itu berlaku dalam pelajaran seterusnya.

Jadi apa yang boleh dilakukan?

Bermula dengan versi kelima Java, setiap jenis primitif memperoleh kelas berkembar. Setiap kelas tersebut menyimpan satu medan dengan nilai jenis tertentu. Kelas ini dipanggil wrapper types , kerana mereka membungkus nilai primitif dalam kelas.

Berikut adalah senarai jenis ini. Adakah anda tahu mana-mana?

Jenis primitif Kelas pembalut
byte
Byte
short
Short
int
Integer
long
Long
float
Float
double
Double
char
Character
boolean
Boolean

Nama jenis primitif bermula dengan huruf kecil, tetapi nama kelas pembalut bermula dengan huruf besar. Beberapa nama kelas juga lebih panjang sedikit: Integerinstead of intи Characterinstead of char.

Semua objek kelas pembalut tidak boleh diubah ( tidak berubah ).

Kod ringkas untuk Integerkelas kelihatan seperti ini:

Kod Catatan
public class Integer
{
   private int value;

   Integer(int x)
   {
      this.value = x;
   }

   public int intValue()
   {
      return this.value;
   }

   public static Integer valueOf(int x)
   {
      return new Integer(x);
   }
}




Pembina Pembolehubah




Kaedah mengembalikan nilai




Kaedah statik mencipta Integerobjek baharu untuk intpembolehubah

2. Menukar an intkepada anInteger

Jenis pembungkus dianggap setara dengan adik beradik primitif mereka: anda boleh membuat objek pembungkus yang sepadan dengan jenis primitif dengan mudah.

Mari kita gunakan jenis int sebagai contoh untuk menganalisis cara jenis primitif berinteraksi dengan jenis pembungkus yang sepadan. Kod untuk menukar daripada an intkepada an Integerdan sebaliknya akan kelihatan seperti ini:

Untuk menukar an intkepada Integer, anda perlu menulis kod ini:

Integer name = new Integer(value);

Di manakah namenama pembolehubah Integer, dan valueialah intnilai yang dibalut.

Contoh:

Kod Catatan
Integer age = new Integer(18);
Integer hundred = new Integer(100);
Integer zero = new Integer(0);

Dan untuk menukar an Integerkepada an int, anda perlu menulis kod ini:

int name = variable.intValue();

Di manakah namenama pembolehubah int, dan variablemerupakan rujukan kepada Integerobjek.

Contoh:

Kod Catatan
Integer age = new Integer(18);
int x = age.intValue();

x == 18
Integer hundred = new Integer(100);
int y = hundred.intValue();

y == 100
Integer zero = new Integer(0);
int z = zero.intValue();


z == 0
int i = 110;
Integer zero = new Integer(i);
int z = zero.intValue();

z == 110

3. Autoboxing dan unboxing

Tetapi walaupun operasi mudah dengan Integerjenis itu tidak mudah untuk ditulis.

Seperti yang kami katakan sebelum ini, Integerjenisnya tidak boleh diubah ( tidak berubah ). Untuk mencipta Integerobjek dengan nilai baharu int, anda perlu mencipta Integerobjek baharu secara eksplisit. Walaupun begitu, mudah untuk mendapatkan nilai yang intdisimpan di dalam Integerobjek — hanya panggil intValue()kaedah tersebut.

Contoh:

Kod Penerangan
Integer a = Integer.valueOf(5);
int b = a.intValue();
Integer c = new Integer(b + 5)
Balut 5dalam Integerobjek
Dapatkan nilai daripada Integerobjek
Cipta objek baharu Integer(sama dengan 10)

Ini kod yang agak menyusahkan, bukankah anda fikir?

Pencipta Java berpendapat demikian, jadi mereka mengajar pengkompil cara melakukan operasi ini secara automatik. Penukaran automatik an intkepada an Integerdipanggil autoboxing (memasukkan nilai secara automatik ke dalam kotak), dan operasi terbalik (menukar an Integerkepada an int) dipanggil unboxing .

Kod anda Apa yang dilihat oleh pengkompil
Integer a = 10;
Integer a = Integer.valueOf(10);
int b = a;
int b = a.intValue();
Integer c = a + b;
Integer c = Integer.valueOf(a.intValue() + b);

Terima kasih kepada autoboxing dan unboxing, anda boleh menetapkan dengan selamat intkepada Integerpembolehubah dan sebaliknya. Anda boleh menulis ungkapan apa-apa kerumitan tanpa membuat perbezaan antara intdan Integerjenis.

Contoh:

Kod Perkara yang akan dihasilkan oleh pengkompil
Integer a = 5;
int b = a;
Integer c = a + b;
int d = a + b + c;
Integer a = Integer.valueOf(5);
int b = a.intValue();
Integer c = Integer.valueOf(a.intValue() + b);
int d = a.intValue() + b + c.intValue();
Integer a = 5;
int b = 5;

if (a == b)
{
   ...
}
Integer a = Integer.valueOf (5);
int b = 5;

if (a.intValue() == b)
{
   ...
}


4. Membandingkan pembolehubah pembalut

Autoboxing dan unboxing adalah proses yang mudah dan telus. Kami menggunakan new Integer()penyata mengikut keperluan, dan kami memanggil intValue()kaedah itu mengikut keperluan.

Semuanya berfungsi dengan baik dan mudah untuk anda, pengaturcara. Perlu diingat bahawa jika anda membandingkan an Integerdan an Integer, maka perbandingan adalah berdasarkan rujukan dan bukan nilai.

Kod Output konsol
Integer a = 1000;
Integer b = 1000;

System.out.println(a == b);



false
Integer a = 1000;
Integer b = 1000;

System.out.println(a.equals(b));



true

Pembolehubah adan btidak menyimpan intnilai. Mereka menyimpan rujukan kepada objek. Ini bermakna adalah penting untuk mengingati cara membandingkannya dengan betul:

salah Betul
Integer a = 1000;
Integer b = 1000;
if (a == b)
{
   ...
}
Integer a = 1000;
Integer b = 1000;
if (a.equals(b))
{
   ...
}