JavaRush /Java Blog /Random-ID /Tipe Data Referensi di Java

Tipe Data Referensi di Java

Dipublikasikan di grup Random-ID
Tanpa memahami sintaksis Java, mustahil untuk menjadi pengembang yang serius, jadi hari ini kami terus mempelajari sintaksisnya. Pada salah satu artikel sebelumnya kita telah membahas tentang variabel primitif, tetapi karena ada dua tipe variabel, hari ini kita akan membahas tipe kedua - tipe referensi di Java. Jadi apa itu? Mengapa tipe data referensi diperlukan di Java? Tipe Data Referensi di Java - 1Bayangkan kita memiliki objek TV dengan beberapa karakteristik, seperti nomor saluran, volume suara, dan bendera:
public class TV {
   int numberOfChannel;
   int soundVolume;
   boolean isOn;
}
Bagaimana tipe sederhana seperti , intmenyimpan data ini? Mari kita ingat: satu variabel intadalah 4 byte. Namun di dalamnya terdapat dua variabel (4 byte + 4 byte) dengan tipe yang sama, dan juga boolean(+1 byte)... Total - 4 hingga 9, tetapi sebagai aturan, lebih banyak informasi yang disimpan dalam suatu objek. Apa yang harus dilakukan? Anda tidak dapat memasukkan objek ke dalam variabel. Pada titik ini dalam cerita kita, variabel referensi muncul. Variabel referensi menyimpan alamat lokasi memori di mana objek tertentu berada. Artinya, ini adalah "kartu nama" dengan alamat, yang dengannya kita dapat menemukan objek kita di memori bersama dan melakukan beberapa manipulasi dengannya. Referensi ke objek apa pun di Java adalah variabel referensi. Ini adalah apa yang akan terlihat seperti objek TV kita:
TV telly = new TV();
Kami menetapkan variabel bertipe TV dengan nama tellyke tautan ke objek bertipe TV yang dibuat. Artinya, JVM mengalokasikan memori di heap untuk objek TV, membuatnya dan alamat lokasinya di memori, memasukkannya ke dalam variabel telly, yang disimpan di stack. Anda dapat membaca lebih lanjut tentang memori, yaitu tumpukan dan banyak informasi berguna lainnya, dalam kuliah ini . Variabel bertipe TV dan objek bertipe TV, pernahkah Anda memperhatikannya? Ini bukan tanpa alasan: objek dengan tipe tertentu harus memiliki variabel yang sesuai dengan tipe yang sama (tidak termasuk pewarisan dan implementasi antarmuka, tetapi sekarang kami tidak memperhitungkannya). Lagi pula, kita tidak akan menuangkan sup ke dalam gelas, bukan? Ternyata objek kita adalah TV, dan variabel referensinya seperti panel kontrol. Dengan menggunakan remote control ini kita dapat berinteraksi dengan objek kita dan datanya. Misalnya, atur karakteristik TV kita:
telly.isOn = true;
telly.numberOfChannel = 53;
telly.soundVolume = 20;
Di sini kita menggunakan operator titik .untuk mengakses dan mulai menggunakan elemen internal objek yang dirujuk oleh variabel. Misalnya, pada baris pertama kita memberi tahu variabel telly: “Beri kami variabel internal isOndari objek yang Anda referensikan dan atur ke true” (nyalakan TV untuk kami).

Mendefinisikan ulang variabel referensi

Katakanlah kita memiliki dua variabel bertipe referensi dan objek yang dirujuknya:
TV firstTV = new TV();
TV secondTV = new TV();
Jika kita menulis:
firstTV = secondTV;
ini berarti kita menetapkan variabel pertama sebagai nilai salinan alamat (nilai bit alamat) ke objek kedua, dan sekarang kedua variabel merujuk ke objek kedua (dengan kata lain, dua kendali jarak jauh untuk hal yang sama TELEVISI). Pada saat yang sama, objek pertama dibiarkan tanpa variabel yang merujuk padanya. Akibatnya, kita memiliki objek yang tidak dapat diakses, karena variabel tersebut merupakan thread bersyarat, yang tanpanya akan berubah menjadi sampah, hanya terletak di memori dan memakan ruang. Objek ini selanjutnya akan dimusnahkan dari memori oleh pengumpul sampah . Tipe Data Referensi di Java - 2Anda dapat memutus utas penghubung dengan suatu objek tanpa tautan lain:
secondTV = null;
Akibatnya, hanya akan ada satu tautan ke objek - firstTV, dan secondTVtidak lagi mengarah ke siapa pun (yang tidak menghalangi kami untuk menetapkan tautan ke objek seperti TV di masa mendatang).

Kelas tali

Secara terpisah, saya ingin menyebutkan kelas String . Ini adalah kelas dasar yang dirancang untuk menyimpan dan bekerja dengan data yang disimpan sebagai string. Contoh:
String text = new String("This TV is very loud");
Di sini kita telah meneruskan string untuk disimpan di konstruktor objek. Tapi tidak ada yang melakukan itu. Bagaimanapun, string dapat dibuat:
String text = "This TV is very loud";
Jauh lebih nyaman, bukan? Dari segi popularitas penggunaannya Stringtidak kalah dengan tipe primitif, namun tetap berupa kelas, dan variabel yang merujuknya bukanlah tipe primitif, melainkan tipe referensi. Kami Stringmemiliki kemampuan luar biasa untuk menggabungkan string:
String text = "This TV" + " is very loud";
Hasilnya, kita akan mendapatkan teksnya lagi: This TV is very loud, karena kedua baris akan digabungkan menjadi satu kesatuan, dan variabel akan merujuk ke teks lengkap ini. Nuansa penting adalah bahwa Stringini adalah kelas yang tidak dapat diubah. Apa artinya? Mari kita ambil contoh ini:
String text = "This TV";
text = text + " is very loud";
Tampaknya semuanya sederhana: kita mendeklarasikan variabel, memberinya nilai. Di baris berikutnya kita mengubahnya. Tapi kami tidak benar-benar berubah. Karena ini adalah kelas yang tidak dapat diubah, pada baris kedua nilai awal tidak diubah, tetapi nilai baru dibuat, yang pada gilirannya terdiri dari nilai pertama + " is very loud".

Konstanta referensi

Dalam artikel tentang tipe primitif, kami menyentuh topik konstanta. Bagaimana perilaku variabel referensi ketika kita mendeklarasikannya final ?
final TV telly = new TV();
Anda mungkin berpikir bahwa ini akan membuat objek tersebut tidak dapat diubah. Tapi tidak, itu tidak benar. Tipe Data Referensi di Java - 3Variabel referensi dengan pengubah finalakan terikat ke objek tertentu tanpa kemampuan untuk melepaskan ikatannya dengan cara apa pun (mendefinisikan ulang atau menyamakannya dengan null). Artinya, setelah menetapkan nilai variabel tersebut, kode seperti:
telly = new TV();
atau
telly = null;
akan menyebabkan kesalahan kompilasi. Artinya, finalini hanya bekerja pada tautan, dan tidak berpengaruh pada objek itu sendiri. Jika pada awalnya kita dapat mengubahnya, kita dapat mengubah keadaan internalnya tanpa masalah:
telly.soundVolume = 30;
Terkadang, variabel ditetapkan sebagai final bahkan dalam argumen metode!
public void enableTV (final TV telly){
   telly.isOn = true;
}
Hal ini dilakukan agar selama proses penulisan suatu metode, argumen-argumen ini tidak dapat dikesampingkan dan, oleh karena itu, mengurangi kebingungan. Bagaimana jika kita menyatakan finalvariabel referensi yang mengacu pada objek yang tidak dapat diubah? Misalnya String:
final String PASSWORD = "password";
Hasilnya, kita akan mendapatkan sebuah konstanta, analog dari konstanta tipe primitif, karena di sini kita tidak dapat mendefinisikan ulang referensi atau mengubah keadaan internal objek (data internal).

Mari kita simpulkan

  1. Sementara variabel sederhana menyimpan bit nilai, variabel referensi menyimpan bit yang mewakili bagaimana suatu objek diambil.
  2. Referensi objek dideklarasikan hanya untuk satu jenis objek.
  3. Kelas apa pun di Java adalah tipe referensi.
  4. Nilai default dari setiap variabel referensi di Java adalah null.
  5. Stringadalah contoh standar tipe referensi. Kelas ini juga tidak dapat diubah.
  6. Variabel referensi dengan pengubah finalterikat hanya pada satu objek tanpa kemungkinan redefinisi.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION