CodeGym /Blog Java /rawak /Autoboxing dan Unboxing di Java
John Squirrels
Tahap
San Francisco

Autoboxing dan Unboxing di Java

Diterbitkan dalam kumpulan
Di Java, ciri primitif dan pembalutnya ialah autoboxing / unboxing. Mari kita gali konsep ini. Seperti yang telah kita pelajari, Java ialah bahasa berorientasikan objek. Ini bermakna semua program yang ditulis dalam Java diperbuat daripada objek. Primitif bukan objek. Tetapi walaupun begitu, pembolehubah pembalut boleh diberikan nilai primitif. Proses ini dipanggil autoboxing. Begitu juga, pembolehubah primitif boleh diberikan objek pembalut. Proses ini dipanggil unboxing. Sebagai contoh:
public class Main {
   public static void main(String[] args) {
       int x = 7;
       Integer y = 111;
       x = y; // Unboxing
       y = x * 123; // Autoboxing
   }
}
Dalam baris 5, kami menetapkan y, yang merupakan objek Integer , kepada primitif x . Seperti yang anda lihat, kami tidak perlu mengambil sebarang langkah tambahan: pengkompil mengetahui bahawa int dan Integer , pada asasnya, adalah perkara yang sama. Itu unboxing. Sesuatu yang serupa berlaku dengan autoboxing pada baris 6: nilai primitif (x * 123) mudah diberikan kepada objek y . Ini adalah contoh autoboxing. Itulah sebabnya istilah itu termasuk perkataan "auto": kerana anda tidak perlu melakukan apa-apa yang istimewa untuk menetapkan primitif kepada objek pembalut yang sepadan (dan sebaliknya). Semuanya berlaku secara automatik. Mudah, ya? :) Kami melihat satu lagi contoh kemudahan autoboxing / unboxing apabila bekerja dengan kaedah. Ini adalah kerana hujah kaedah juga dikotak-kotak dan dinyahkotak. Sebagai contoh, jika kaedah mengambil dua objek Integer sebagai input, kita boleh dengan mudah menghantar int s biasa sebaliknya!
public class Main {
   public static void main(String[] args) {

       printNumber(7);// A standard int, not even an int variable
   }

   public static void printNumber(Integer i) {
       System.out.println("You entered the number " + i);
   }
}
Pengeluaran:
You entered the number 7
Ia juga berfungsi dalam arah lain:
public class Main {
   public static void main(String[] args) {

       printNumber(new Integer(632));
   }

   public static void printNumber(int i) {
       System.out.println("You entered the number " + i);
   }
}
Perkara penting yang perlu anda ingat ialah ini: autoboxing dan unboxing tidak berfungsi untuk tatasusunan!
public class Main {
   public static void main(String[] args) {

       int[] i = {1,2,3,4,5};

       printArray(i);// Error, this won't compile!
   }

   public static void printArray(Integer[] arr) {
       System.out.println(Arrays.toString(arr));
   }
}
Percubaan untuk menghantar tatasusunan primitif kepada kaedah yang mengambil tatasusunan objek akan mengakibatkan ralat penyusunan. Kesimpulannya, mari kita bandingkan secara ringkas primitif dan pembalut sekali lagi.

Primitif:

  • Mempunyai kelebihan prestasi
Pembungkus:
  • Benarkan kami tidak melanggar prinsip "semuanya adalah objek", yang bermaksud bahawa nombor, aksara dan nilai boolean tidak melanggar konsep ini
  • Kembangkan kemungkinan untuk bekerja dengan nilai ini dengan menyediakan kaedah dan medan yang mudah
  • Perlu apabila kaedah hanya berfungsi dengan objek
Untuk mengukuhkan perkara yang anda pelajari, kami cadangkan anda menonton pelajaran video daripada Kursus Java kami
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION