Apakah objek boleh ubah/tidak berubah, dan untuk apa ia?  - 1

"Hai, Amigo!"

"Hai, Bilaabo!"

"Hari ini Bilaabo akan memberitahu anda tentang objek yang boleh berubah dan tidak berubah .

"Objek yang anda boleh tukar selepas ia dicipta dipanggil boleh ubah ."

"Objek yang tidak boleh ditukar selepas ia dicipta dipanggil tidak boleh ubah ."

"Apakah yang menentukan sama ada saya boleh menukar objek?"

"Pengarang kelas baharu boleh menjadikan objek kelas itu tidak berubah. Contohnya, jika anda menjadikan semua penetap peribadi, maka objek hanya akan mempunyai pembina dan pengambil; ini bermakna mustahil untuk diubah selepas ia dicipta ."

"Dan apa gunanya itu?"

"Objek tidak berubah mempunyai banyak sifat berguna, tetapi saya akan menyerlahkan dua yang biasa kepada hampir semua objek tidak berubah:"

1) Objek tidak berubah adalah lebih mudah untuk dilaksanakan daripada objek boleh berubah.

2) Objek tidak berubah boleh digunakan secara bebas merentas berbilang benang serentak.

"Apabila pembangun memutuskan untuk menulis kelas tidak berubah, dia biasanya membuat kedua-dua versi kelas boleh ubah dan tidak berubah."

"Tetapi apa gunanya menulis dua kelas dan bukannya satu?"

"Kadang-kadang ia berbaloi apabila versi objek yang tidak berubah menjadi jauh lebih mudah/cepat daripada yang boleh berubah. Jadi, mereka membuat dua versi. Ia seperti ArrayList dan LinkedList: kedua-duanya adalah senarai, tetapi satu dioptimumkan untuk tujuan tertentu, dan yang kedua untuk orang lain."

"Itu lebih masuk akal."

"Terdapat juga kelas yang tidak boleh diubah semata-mata, yang tidak mempunyai versi boleh ubah."

"Tetapi bagaimana jika saya perlu menukar sesuatu dalam salah satu objek itu? Apa sebenarnya yang boleh anda lakukan dengan objek tidak berubah?"

"Biasanya, kelas tidak berubah mengandungi pelbagai kaedah yang bertindak seperti mereka menukar objek, tetapi kaedah ini hanya mencipta objek baharu dan mengembalikannya, bukannya menukar objek itu sendiri."

"Berikut adalah beberapa contoh:"

kod Java Penerangan
String s = "london";
String s2 = s.toUpperCase();
Akibatnya, s mengandungi rentetan «london» dan s2 mengandungi «LONDON»
Integer i = 1;
Integer j = i;
j++;
Inilah yang sebenarnya berlaku:
Integer i = new Integer(1);
Integer j = i;
j = Integer baharu(i.getInt()+1);

"Kelas String ialah kelas tidak boleh diubah. Semua objek String tidak boleh diubah, tetapi itu tidak menghalang kita daripada bekerja dengannya. Contohnya, kaedah toUpperCase () kelas String menukar String kepada huruf besar (iaitu menggantikan semua huruf kecil dengan huruf besar). Walau bagaimanapun, kaedah ini tidak mengubah String itu sendiri, sebaliknya ia mengembalikan String baharu. String baharu ini adalah sama dengan yang pertama kecuali semua aksara adalah huruf besar (huruf besar)."

"Kelas Integer juga ialah kelas tidak berubah. Semua objek Integer tidak berubah. Setiap kali kita menukar objek Integer, kita sebenarnya mencipta objek baharu."

"Menariknya! Hooray, Bilaabo."

"Hooray untuk saya! Hooray untuk Bilaabo!"