Lompat ke konten Lompat ke sidebar Lompat ke footer

Object String Java Bersifat Kekal

Sebelum lebih jauh dengan materi diskusi Java, terlebih dahulu perhatikan class String dan fungsinya pada Java sebelum menarik suatu kesimpulan terlebih dahulu.


Sebelum lebih lanjut mempelajari materi tentang Object String Java Bersifat Kekal, terlebih dahulu pelajari materi tentang: StringJoiner Java Beserta Contohnya, StringBuffer Java Beserta Penjelasannya, dan StringBuilder Java Beserta Penjelasannya.

Berikut adalah cara kerja class string Java:
String str = "knowledge";
Seperti biasa, untuk dapat menggunakan class string dilakukan penciptaan string yang mengandung nilai karakter "knowledge" dan ditetapkan ke nilai referensi str.

Sekarang, lakukan pembuatan beberapa bentuk fungsi lainnya:
// assigns a new reference to the
// same string "knowledge"
String s = str;

Mari lihat cara kerja statement berikut:
str = str.concat(" base");

Statement ini akan menambah sebuah string " base" ke str. Namun, kenapa hal tersebut dapat terjadi? Sejak kapan object string Java bersifat kekal pada program?

Ketika statement sebelumnya dieksekusi, maka virtual machine akan mengambil nilai string dari str, berupa karakter "knowledge" dan menambahkannya ke " base", yang kemudian memberikan nilai baru berupa "knowledge base". Sekarang, karena program telah bersifat kekal, maka virtual machine tidak dapat menerapkan nilai tersebut ke str, sehingga hal tersebut mengakibatkan terciptanya object string baru, yang kemudian memberikan nilai "knowledge base", dan memberikannya ke referensi str.

Hal yang penting untuk dicatatat adalah ketika object string bersifat kekal, maka nilai referensi variabelnya tidak. Oleh karena itu, pada contoh sebelumnya, nilai referensi dibuat untuk format baru dari object string.

Pada titik ini, berarti telah tercipta dua object string, dimana yang pertama dibuat dengan nilai "knowledge", yang dituju oleh s, dan yang kedua adalah "knowledge base", yang dituju oleh str. Namun, secara teknis, sebenarnya telah diciptakan tiga buah object, dimana yang ketika secara literal berisi nilai "base" pada statement concat.

Beberapa Alasan Object String Dibuat Kekal pada Java:
  • Kumpulan String tidak dapat dimungkinkan jika String tidak dapat diubah di Java. Oleh karena itu, banyak ruang heap yang dihemat oleh JRE, sehingga variabel string yang sama dapat dirujuk oleh lebih dari satu variabel string dalam kumpulan. Sedangkan interning string juga tidak dapat dilakukan jika String tidak dapat diubah.
  • Jika tidak membuat String menjadi kekal atau immutable, maka hal ini akan menimbulkan ancaman keamanan yang serius pada aplikasi. Misalnya, pada kondisi nama pengguna basis data, dan kata sandi yang diteruskan sebagai string untuk menerima koneksi basis data, atau enskripsi host dan port pemrograman soket yang juga diteruskan sebagai string. String tidak dapat diubah, sehingga nilainya juga tidak dapat diubah. Jika String tidak dapat diubah, maka peretas manapun tidak dapat menyebabkan masalah keamanan dalam aplikasi tersebut dengan cara melakukan berubahan nilai referensi.
  • String aman untuk multithreading karena sifatnya yang tidak dapat diubah, dimana Thread yang berbeda dapat mengakses satu "String instance". Hal ini menghilangkan sinkronisasi untuk keamanan thread karena membuat string aman untuk thread secara implisit.
  • Kekekalan pada Java memberikan keamanan dalam memuat class yang benar oleh Classloader. Misalnya, dimiliki sebuah instance yang digunakan untuk kelas java.sql.Connection, tetapi perubahan nilainya direferensikan ke kelas myhacked.Connection, dimana hal tersebut dapat mencegah hal-hal yang tidak diinginkan pada database.

Fakta Tentang Penggunaan Memori dan String

Bagaimana jika tidak mempunyai referensi s lain ke "knowledge"? Jawabannya, nilai string akan dihilangkan, tetap ada, namun dianggap hilang karena tidak memiliki nilai referensi.

Contoh: Perhatikan potongan program berikut.

// Program Java untuk

// mendemostrasikan kenapa

// String Java immutable.

import java.io.*;


class MKN {


public static void main(String[] args)

{

String s1 = "java";

s1.concat(" rules");

// Yes, s1 masih mengarah ke

// "java".

System.out.println("s1 refers to " 

+ s1);

}


}

Output:
s1 refers to java

Penjelasan:
  • Baris pertama cukup mudah: buat String baru "java" dan tunjuk ke s1. Selanjutnya, Virtual machine membuat String baru "java rules" String, tetapi tidak ada yang merujuk ke sana. Jadi, String kedua langsung hilang, karena tidak dapat dicapai, sementara variabel referensi s1 masih mengacu pada string asli "java".
  • Hampir setiap method Java yang diterapkan pada object String, dengan tujuan untuk memodifikasinya, akan membuat objek String baru pada method tersebut. Kemana perginya objek String tersebut? Ya, posisinya ada di memori, dan hal ini sejalan dengan tujuan utama bahasa pemrograman untuk mengefisienkan penggunaan memori, terutama Java.
  • Seiring berkembangnya aplikasi, literal String biasanya menempati area memori yang besar, yang bahkan dapat menyebabkan redundansi. Jadi, untuk membuat Java lebih efisien, maka JVM menyisihkan area memori khusus yang disebut "String Constant Pool".
  • Ketika kompilator melihat literal String, maka kompilator akan mencari String untuk dikumpulkan. Jika telah ditemukan kecocokan, maka referensi ke literal baru diarahkan ke String yang ada dan tidak ada object String baru yang dibuat. String yang ada hanya memiliki satu referensi lagi dan inilah tujuan utama membuat object String tidak dapat diubah.
  • Di kumpulan konstanta String, pada object String kemungkinan besar memiliki satu atau banyak referensi. Jika beberapa referensi menunjuk ke String yang sama tanpa sadar, maka hal ini akan berakibat buruk jika salah satu referensi mengubah nilai String tersebut. Itu sebabnya object String tidak dapat diubah.
  • Bagaimana jika seseorang mengesampingkan fungsionalitas kelas String? Itulah alasan kelas String ditandai sebagai final sehingga tidak ada yang bisa mengesampingkan perilaku method dari String Java.

Keuntungan sifat kekalnya objek string:
  • Keamanan: Karena string bersifat kekal, pengembang dapat yakin bahwa nilainya tidak akan berubah secara tidak sengaja di bagian lain dari kode program. Ini membantu mencegah kesalahan yang mungkin terjadi akibat perubahan nilai yang tidak disengaja.
  • Thread-safe: Karena string tidak dapat diubah, objek string bersifat thread-safe secara alami. Ini berarti pengembang tidak perlu khawatir tentang sinkronisasi akses ke objek string dalam lingkungan multi-threaded.
  • Optimalisasi Memori: Karena string bersifat kekal, JVM (Java Virtual Machine) dapat melakukan berbagai optimisasi memori, seperti penggunaan string pooling dan penggunaan referensi yang sama untuk string yang identik. Hal ini membantu menghemat penggunaan memori dan meningkatkan kinerja aplikasi.

Konsekuensi dari Sifat Kekalnya Objek String

Meskipun sifat kekalnya objek string memiliki banyak keuntungan, ini juga memiliki beberapa konsekuensi yang perlu dipertimbangkan:
  • Immutability: Karena string tidak dapat diubah, setiap kali melakukan operasi seperti penggabungan string atau pengubahan karakter, itu sebenarnya membuat string baru. Ini dapat menyebabkan overhead memori jika tidak dikelola dengan benar.
  • Performa: Meskipun JVM melakukan optimisasi memori, manipulasi string dalam lingkup yang besar atau dalam loop dapat menjadi tidak efisien jika tidak ditangani dengan hati-hati. Dalam kasus seperti itu, penggunaan StringBuilder atau StringBuffer mungkin lebih disarankan.

Kesimpulan

Sifat kekalnya objek string adalah salah satu fitur fundamental dalam bahasa pemrograman Java. Meskipun mungkin membatasi kemampuan untuk mengubah string, ini membawa keuntungan dalam hal keamanan, thread-safety, dan optimalisasi memori. Dengan pemahaman yang baik tentang sifat ini, pengembang dapat mengembangkan aplikasi Java yang lebih aman, lebih efisien, dan lebih dapat diandalkan.

Artikel ini didedikasikan kepada: Urlia Purmalasari, Velina Claudya Ditarta, Vicky Wahyu Nala Hilma, Viko Aldino Wibowo, dan Viona Hayu Puspitarini.

5 komentar untuk "Object String Java Bersifat Kekal"

  1. Apa yang dimaksud dengan object string pada Java?

    BalasHapus
    Balasan
    1. Pada Java, String merupakan object yang mewakili sejumlah nilai karakter tertentu yang berasal dari nilai inputan, dimana setiap huruf dalam string merupakan nilai karakter terpisah yang membentuk object string Java.

      Hapus
    2. Karakter pada Java diwakili oleh class char, dimana pengguna dapat menulis sekumpulan array dari nilai-nilai char tersebut yang jika digabungkan maka akan membentuk string.

      Hapus
  2. Apa yang terjadi jika nilai string object pada Java dipisah per karakter?

    BalasHapus
    Balasan
    1. Yang terjadi jika nilai string dipisah menjadi nilai-nilai perkarakter adalah object string tersebut berubah menjadi jenis data baru dengan tipe data char atau string dengan nilai yang lebih kecil.

      Hapus

Hubungi admin melalui Wa : +62-896-2414-6106

Respon komentar 7 x 24 jam, mohon bersabar jika komentar tidak langsung dipublikasi atau mendapatkan balasan secara langsung.

Bantu admin meningkatkan kualitas blog dengan melaporkan berbagai permasalahan seperti typo, link bermasalah, dan lain sebagainya melalui kolom komentar.

- Ikatlah Ilmu dengan Memostingkannya -
- Big things start from small things -