Apa itu objek yang bisa berubah/tidak berubah, dan untuk apa itu?  - 1

"Hai, Amigo!"

"Hai, Bilaabo!"

"Hari ini Bilaabo akan memberi tahu Anda tentang objek yang dapat berubah dan tidak dapat diubah .

"Objek yang dapat Anda ubah setelah dibuat disebut bisa berubah ."

"Objek yang tidak dapat diubah setelah dibuat disebut tidak dapat diubah ."

"Apa yang menentukan apakah saya dapat mengubah objek?"

"Penulis kelas baru dapat membuat objek dari kelas tersebut tidak dapat diubah. Misalnya, jika Anda menjadikan semua setter bersifat pribadi, maka objek hanya akan memiliki konstruktor dan getter; itu berarti tidak mungkin untuk mengubah setelah dibuat ."

"Dan apa gunanya itu?"

"Objek yang tidak dapat diubah memiliki banyak properti yang berguna, tetapi saya akan menyoroti dua yang umum untuk hampir semua objek yang tidak dapat diubah:"

1) Objek yang tidak dapat diubah jauh lebih mudah diimplementasikan daripada objek yang dapat diubah.

2) Objek yang tidak dapat diubah dapat digunakan secara bebas di beberapa utas secara bersamaan.

"Ketika seorang pengembang memutuskan untuk menulis kelas yang tidak dapat diubah, dia biasanya membuat versi kelas yang dapat diubah dan tidak dapat diubah."

"Tapi apa gunanya menulis dua kelas, bukan satu?"

"Kadang-kadang sangat berharga ketika versi objek yang tidak dapat diubah akan jauh lebih sederhana/lebih cepat daripada versi yang dapat diubah. Jadi, mereka membuat dua versi. Ini seperti ArrayList dan LinkedList: keduanya adalah daftar, tetapi satu dioptimalkan untuk tujuan tertentu, dan yang kedua untuk orang lain."

"Itu sudah lebih masuk akal."

"Ada juga kelas yang murni tidak dapat diubah, yang tidak memiliki versi yang dapat diubah."

"Tapi bagaimana jika saya perlu mengubah sesuatu di salah satu objek itu? Apa yang sebenarnya bisa Anda lakukan dengan objek yang tidak dapat diubah?"

"Biasanya, kelas yang tidak dapat diubah berisi berbagai metode yang berfungsi seperti mengubah objek, tetapi metode ini hanya membuat objek baru dan mengembalikannya, alih-alih mengubah objek itu sendiri."

"Ini beberapa contohnya:"

kode jawa Keterangan
String s = "london";
String s2 = s.toUpperCase();
Akibatnya, s berisi string «london» dan s2 berisi «LONDON»
Integer i = 1;
Integer j = i;
j++;
Inilah yang sebenarnya terjadi:
Integer i = new Integer(1);
Bilangan bulat j = i;
j = Bilangan Bulat baru(i.getInt()+1);

"Kelas String adalah kelas yang tidak dapat diubah. Semua objek String tidak dapat diubah, tetapi itu tidak menghalangi kita untuk bekerja dengannya. Misalnya, metode toUpperCase () dari kelas String mengubah String menjadi huruf besar (yaitu menggantikan semua huruf kecil dengan huruf kapital). Namun, metode ini tidak mengubah String itu sendiri, melainkan mengembalikan String baru. String baru ini identik dengan yang pertama kecuali semua karakter adalah huruf besar (huruf besar)."

"Kelas Integer juga merupakan kelas yang tidak dapat diubah. Semua objek Integer tidak dapat diubah. Setiap kali kita mengubah objek Integer, kita sebenarnya membuat objek baru."

"Menarik sekali! Hore, Bilaabo."

"Hore untukku! Hore untuk Bilaabo!"