Grafik perbandingan
Dasar untuk Perbandingan | Tinju | Buka kotak |
---|---|---|
Dasar | Jenis objek mengacu pada tipe nilai. | proses pengambilan nilai dari objek kotak. |
Penyimpanan | Nilai yang disimpan di tumpukan disalin ke objek yang disimpan di memori tumpukan. | Nilai objek yang disimpan di memori tumpukan disalin ke tipe nilai yang disimpan di tumpukan. |
Konversi | Konversi tersirat. | Konversi eksplisit. |
Contoh | int n = 24; objek ob = n; | int m = (int) ob; |
Definisi Tinju
Boxing adalah prosedur mengubah tipe nilai menjadi tipe objek. Di sini, tipe nilai disimpan di tumpukan, dan tipe objek disimpan di memori tumpukan. Konversi tipe nilai ini ke tipe objek adalah konversi implisit. Anda dapat secara langsung menetapkan nilai ke objek, dan C # akan menangani konversi sisanya. Mari kita memahami Boxing dengan sebuah contoh.
int i = 24; objek ob = i; // Kotak bilangan bulat tipe n ke dalam jenis objek ob. atau objek ob1 = 21; // di sini juga tipe objek ob1 mengacu pada tipe integer
Dalam kode di atas, tipe integer i yang berisi nilai 24 disimpan di stack dan disalin ke objek tipe ob. Jenis objek sekarang mengacu pada nilai integer. Sekarang, "int i" juga mengandung nilai 24 dan "objek tipe ob" juga mengandung nilai 24, tetapi kedua nilai tersebut tidak tergantung satu sama lain yaitu jika Anda mengubah nilai i, itu tidak akan mencerminkan perubahan dalam nilai ob.
Tinju mengkonsumsi memori ekstra seiring dengan waktu tambahan. Alasannya adalah bahwa objek baru, yang akan merujuk pada tipe nilai, harus mengalokasikan ruang memori di heap. Selanjutnya, nilai tipe nilai yang disimpan di tumpukan akan ditransfer ke ob tipe objek, di lokasi memori tumpukan.
Definisi Unboxing
Kebalikan dari Boxing adalah Unboxing. Unboxing adalah konversi dari tipe objek ke tipe nilai. Di Unboxing nilai tipe objek kotak yang disimpan di heap ditransfer ke tipe nilai yang disimpan di stack. Tidak seperti Boxing, Unboxing harus dilakukan secara eksplisit. Tipe objek secara eksplisit dilemparkan ke tipe nilai, dan tipe nilai harus sama dengan nilai yang dirujuk oleh tipe objek. Mari kita pahami konsep Unboxing dengan sebuah contoh.
int i = 24; objek ob = i; // Kotak bilangan bulat tipe n ke dalam jenis objek ob. int j = (int) ob; // Buka kotak nilai integer yang disimpan dalam tipe objek ob ke tipe integer y.
Nilai yang disimpan dalam objek ob diambil dengan melemparkannya ke jenis yang sama dengan objek yang dimaksud yaitu tipe integer “j”.
Membuka kotak juga menghabiskan lebih banyak memori dan lebih banyak waktu. Karena, ketika jenis objek harus dibuka kotaknya maka nilai dari jenis objek yang disimpan di heap harus ditransfer ke jenis nilai baru yang disimpan di tumpukan. Jenis objek yang nilainya telah diambil sekarang akan tersedia untuk pengumpulan sampah.
Perbedaan Kunci Antara Boxing dan Unboxing
- Dalam tinju, sebuah objek dibuat untuk merujuk sebagai tipe nilai. Di sisi lain, proses mengambil kembali nilai dari objek kotak disebut unboxing.
- Jenis nilai yang disimpan di tumpukan disalin ke objek yang disimpan di memori tumpukan. Di sisi lain, dalam unboxing, objek yang disimpan di memori tumpukan disalin ke jenis nilai yang disimpan di memori tumpukan.
- Boxing adalah konversi tersirat sedangkan, unboxing adalah konversi eksplisit.
Kesimpulan:
Baik tinju dan unboxing menghabiskan lebih banyak waktu dan memori, dan harganya mahal. Mereka juga kurang dalam keamanan jenis dan meningkatkan overhead runtime. Itu selalu disarankan untuk menghindari terlalu banyak menggunakan tinju dan unboxing dalam program ini.