Halo, Amigo! Saya ingin memberi tahu Anda tentang struktur internal variabel. Seperti yang sudah Anda ketahui, setiap variabel dikaitkan dengan area memori tempat nilainya disimpan. "

"Ya. Kamu memberitahuku tentang itu terakhir kali."

"Bagus. Bagus kalau kamu ingat. Kalau begitu aku akan melanjutkan."

"Semua tipe komposit terdiri dari yang lebih sederhana. Dan mereka, pada gilirannya, terdiri dari yang lebih sederhana. Sampai, akhirnya, kita berakhir dengan tipe primitif , yang tidak dapat disederhanakan lebih lanjut. Itulah yang disebut – tipe primitif . Untuk contoh, int adalah tipe primitif, tetapi String adalah tipe komposit yang menyimpan datanya sebagai tabel karakter (di mana setiap karakter adalah tipe primitif char )."

"Sangat menarik. Lanjutkan."

"Tipe gabungan dibentuk dengan mengelompokkan yang sederhana. Kami menyebut tipe seperti itu class . Ketika kami mendefinisikan kelas baru dalam suatu program, kami mendeklarasikan tipe data komposit baru . Datanya akan berupa tipe komposit lain atau tipe primitif."

kode jawa Keterangan
public class Person
{
   String name;
   int age;
}
Jenis komposit baru dideklarasikan – Person.
Datanya disimpan dalam Stringvariabel (tipe komposit) namedan intvariabel (tipe primitif).age
public class Rectangle
{
   int x, y, width, height;
}
Jenis komposit baru dideklarasikan – Rectangle.
Ini terdiri dari empat int(tipe primitif) variabel.
public class Cat
{
   Person owner;
   Rectangle territory;
   int age;
   String name;
}
Jenis komposit baru dideklarasikan – Cat. Ini memiliki variabel berikut:
owner, tipe komposit Person
territory, tipe komposit Rectangle
age, tipe primitif int
name, tipe kompositString

"Untuk saat ini, semuanya jelas, betapapun anehnya kelihatannya."

"Tipe besar (komposit) mengandung banyak tipe kecil (primitif). Itu sebabnya objek tipe ini menghabiskan banyak memori - lebih banyak daripada variabel tipe primitif. Terkadang jauh lebih banyak. Melakukan operasi penugasan dengan variabel seperti itu biasanya memakan waktu lama waktu dan membutuhkan penyalinan sebagian besar memori.Itulah sebabnya variabel tipe komposit tidak menyimpan objek itu sendiri, melainkan hanya referensi untuk itu, yaitu alamat empat byte.Ini cukup untuk mengatasi data dalam objek tersebut. Mesin Java menangani semua kompleksitas yang terkait."

"Aku tidak mengerti semua itu."

"Kami sebelumnya telah mengatakan bahwa variabel itu seperti sebuah kotak. Jika Anda ingin menyimpan angka 13 di dalamnya, Anda dapat menulis 13 di selembar kertas dan memasukkannya ke dalam kotak."

"Tapi bayangkan Anda perlu menyimpan sesuatu yang lebih besar di dalam kotak (variabel). Misalnya, seekor anjing, mobil, atau tetangga Anda. Alih-alih mencoba mendorong yang tidak dapat didorong ke dalam kotak, Anda dapat melakukan sesuatu yang lebih mudah: gunakan foto anjing bukannya anjing yang sebenarnya, plat nomor bukan mobil yang sebenarnya, atau nomor telepon tetangga Anda bukan tetangga Anda."

“Kita mengambil selembar kertas dan menuliskan nomor telepon tetangga. Ini seperti referensi ke suatu objek. Jika kita menyalin selembar kertas dengan nomor telepon tetangga di atasnya dan memasukkannya ke dalam beberapa kotak, sekarang ada lebih banyak referensi. ke tetanggamu. Tapi, seperti sebelumnya, kamu masih punya satu tetangga saja. Masuk akal, bukan?"

"Fitur penting dalam menyimpan data dengan cara ini adalah Anda dapat memiliki banyak referensi ke satu objek "

"Menarik sekali! Saya hampir mengerti. Tolong beri tahu saya sekali lagi – apa yang akan terjadi jika saya menugaskan variabel bertipe komposit ke variabel lain bertipe komposit yang sama?"

"Maka kedua variabel akan menyimpan alamat yang sama. Itu artinya jika Anda mengubah data objek yang direferensikan oleh satu variabel, Anda mengubah data yang direferensikan oleh yang lain . Kedua variabel tersebut mereferensikan objek yang sama . Tentu saja, mungkin ada banyak variabel lain yang juga menyimpan referensi ke sana."

"Apa yang dilakukan variabel tipe komposit (referensi/kelas) jika mereka tidak memegang referensi ke suatu objek? Apakah itu mungkin?"

"Ya, Amigo. Anda mendahului saya dengan pertanyaan Anda. Itu mungkin. Jika variabel dari tipe referensi (komposit) tidak menyimpan referensi ke suatu objek, maka ia menyimpan apa yang dikenal sebagai 'null reference'. Pada dasarnya, ini berarti mereferensikan objek yang alamatnya 0. Namun, mesin Java tidak pernah membuat objek dengan alamat ini, jadi ia selalu tahu bahwa jika variabel referensi berisi 0, maka ia tidak menunjuk ke objek apa pun. ."

kode jawa Keterangan
String s;
String s = null;
Pernyataan setara.
Person person;
person = new Person();
person = null;
Kami membuat variabel orang yang nilainya nol.
Kami memberikannya alamat objek Person yang baru dibuat.
Kami menetapkan nol ke variabel.
Cat cat = new Cat();
cat.owner = new Person();
cat.owner.name = "God";
Kami membuat objek Cat dan menyimpan alamatnya dalam variabel cat; cat.pemilik sama dengan nol.
Kami menyetel cat.owner sama dengan alamat objek Person yang baru dibuat.
cat.owner.name masih sama dengan null.
Kami menyetel cat.owner.name sama dengan "God"

"Apakah saya mengerti Anda dengan benar? Variabel dibagi menjadi dua jenis: tipe primitif dan tipe referensi. Tipe primitif menyimpan nilai secara langsung, sedangkan tipe referensi menyimpan referensi ke suatu objek. Tipe primitif termasuk int, char, boolean, dan banyak lainnya. Referensi jenis termasuk yang lainnya. Kami menggunakan kelas untuk membuatnya."

"Kau benar sekali, anakku."

"Jadi, kamu bilang kamu sudah mengerti segalanya. Ini beberapa tugas untuk membantumu memperkuat pengetahuanmu."