Bagaimana kelas String bekerja di Java
Sumber:
DZone Saya baru-baru ini menemukan pertanyaan berikut di forum: “Berapa banyak objek
String yang dibuat di sini ? Satu atau dua?".
String langName = new String("Java");
Saya penasaran bagaimana orang lain menjawabnya, mengetahui bahwa ini adalah pertanyaan yang kompleks, terutama jika seseorang tidak terlalu paham tentang cara kerja kelas
String di Java. Jadi, saya terjun ke bagian komentar.
Yang mengejutkan saya, di antara pemberi komentar ada yang memilih “Satu” sebagai jawaban yang benar, namun lebih banyak lagi yang menjawab “Dua”. Untuk sesaat, saya bahkan mulai meragukan pengetahuan saya tentang
Strings . Jawaban yang benar adalah semuanya tergantung pada keadaan. Pertanyaannya tidak cukup jelas dan menyisakan ruang untuk perdebatan. Saya akan mengulanginya seperti ini:
1. Berapa banyak objek Java String yang dibuat di memori saat pernyataan ini dijalankan?
Hanya ada satu jawaban.
Berapa banyak objek Java String yang tersisa di memori setelah menjalankan pernyataan ini?
Jawabannya ada dua. Semoga ketidakpastian itu hilang setelah saya memeriksa dump memori program dengan pernyataan seperti contoh di atas.
Dump memori program pada gambar di atas menunjukkan keberadaan dua objek
String dengan konten yang sama. Hal ini membuktikan bahwa memanggil konstruktor kelas
String dan meneruskan string literal sebagai argumen menghasilkan dua objek yang ditambahkan ke tumpukan memori: satu di memori biasa (non-pool), dan yang lainnya di String Constant Pool (SCP), dan area di memori yang juga merupakan bagian dari heap. Kesulitan dimulai setelah penambahan. Memanggil konstruktor selalu menghasilkan objek baru yang ditempatkan di area non-kumpulan. Namun argumen konstruktor, yang merupakan string literal, juga merupakan objek, dan dibuat serta disimpan di SCP selama pemuatan kelas, asalkan kumpulan string tidak berisi string dengan konten yang sama. Spesifikasi
Bahasa Java menyatakan bahwa “string literal—atau, lebih umum, String yang merupakan nilai ekspresi konstan (§15.28)—adalah “diinternir” untuk berbagi instance unik menggunakan metode String .intern
" . Karena string di Java bersifat literal dan karenanya mewakili nilai ekspresi konstan, maka string tersebut dikumpulkan. Agar lebih jelas lagi, mari kita tulis ulang kode yang disajikan di awal artikel sebagai berikut:
String java = "Java";
String langName = new String(java);
Sekarang mari kita kembali ke pertanyaan utama. Apakah pernyataan berikut akan membuat satu atau dua objek
String :
String langName = new String("Java");
Untuk menjawab pertanyaan ini dan menghilangkan kecurigaan, mari kita lihat bytecode dari metode utama:
public static main([Ljava/lang/String;)V
L0
LINENUMBER 11 L0
NEW java/lang/String
DUP
LDC "Java"
INVOKESPECIAL java/lang/String. (Ljava/lang/String;)V
ASTORE 1
L1
LINENUMBER 14 L1
FRAME APPEND [java/lang/String]
GOTO L1
L2
LOCALVARIABLE args [Ljava/lang/String; L0 L2 0
LOCALVARIABLE langName Ljava/lang/String; L1 L2 1
MAXSTACK = 3
MAXLOCALS = 2
Pada baris 6 Anda dapat melihat perintah LDC (Load Constant). Ini memuat elemen dari kumpulan konstan string ke tumpukan. Ini berarti bahwa pada saat konstruktor dipanggil, literal Java, yang juga merupakan sebuah objek, telah ditambahkan ke kumpulan. Ini terjadi saat memuat kelas. Jadi, memanggil konstruktor kelas
String dengan literal string hanya akan membuat satu objek dan menempatkannya di lokasi memori yang tidak dikumpulkan.
Pelajari cara mengimplementasikan antarmuka web di Java
Sumber:
Dev.to Dunia JavaScript menawarkan kerangka web yang berguna dan menyenangkan, tidak ada keraguan tentang hal itu. Ada alternatif menarik untuk pengembang Java - kerangka
Vaadin open source . Dengannya, Anda dapat dengan mudah mengimplementasikan
antarmuka pengguna grafis (GUI) untuk web hanya dengan menggunakan bahasa pemrograman Java dan tidak ada yang lain. Anda tidak perlu menulis satu baris pun HTML atau JavaScript. Sebuah gambar bernilai ribuan kata:
Bagaimana cara kerja Vaadin?
Di sebelah kiri tangkapan layar Anda melihat kelas Java. Kode ini berjalan di server seperti Apache Tomcat, Eclipse Jetty atau container servlet lainnya. Anda dapat menggunakan API yang disediakan oleh platform untuk membuat
komponen antarmuka pengguna (UI) seperti kolom teks, kotak kombo, kisi data, pemilih tanggal, kolom unggah, dan banyak lainnya. Anda dapat menggabungkan komponen-komponen ini untuk membuat tampilan (juga dikenal sebagai halaman atau UI), menggunakan tata letak untuk menyusun komponen antarmuka pengguna (UI) secara vertikal, horizontal, atau cara lain apa pun menggunakan CSS. Pada contoh sebelumnya, kita membuat
TextField dan
Button dengan menambahkannya ke
VerticalLayout . Setelah tampilan siap, Anda dapat membukanya melalui URL menggunakan anotasi
@Route . Dalam contoh ini, kami menyediakannya di http://localhost:8080/hello menggunakan
@Route("hello") . Aplikasi Vaadin adalah aplikasi web di Java. Kerangka kerja ini menyediakan implementasi Servlet (
VaadinServlet ) yang menangani permintaan dan respons HTTP untuk Anda. Servlet ini memindai kelas Java yang ditandai dengan anotasi
@Route untuk menampilkan tampilan yang benar di browser. Saat aplikasi Vaadin pertama kali diminta, Vaadin merespons dengan file JavaScript ringan yang berfungsi sebagai mesin klien. Mesin ini menangani pemrosesan peristiwa di browser dan mengirimkannya ke server sebagai pesan JSON. Objek
VaadinServlet memproses permintaan dan juga mengembalikan respons JSON ke mesin sisi klien. Mesin kemudian menggunakan pesan ini untuk memperbarui elemen pada halaman yang perlu diperbarui, jika ada. Vaadin menggunakan sesi HTTP untuk menyimpan pohon komponen yang berisi status antarmuka pengguna. Hal-hal seperti komponen membentuk representasi dan statusnya (diaktifkan/dinonaktifkan, keterangan, nilai, dll.). Ini semua memberikan tingkat keamanan yang patut disebutkan. Karena logika antarmuka pengguna ada di server, maka tidak dapat diakses oleh penyerang. Pemeriksaan dilakukan di server. Misalnya, jika Tombol dinonaktifkan menggunakan
setEnabled(false) , maka ini bukan hanya fitur kosmetik di browser - server tidak akan menjalankan logika apa pun di pendengar klik yang ditambahkan ke tombol yang dinonaktifkan, sehingga mencegah penyerang mengeksploitasi alat pengembang di browser untuk mengubah status yang diaktifkan atau panggil
VaadinServlet untuk mensimulasikan klik mouse (acara klik).
Apakah Vaadin gratis untuk digunakan?
Ya. Vaadin adalah kerangka kerja sumber terbuka yang diterbitkan di bawah Lisensi Apache 2.0. Anda tidak perlu membeli apa pun untuk membuat aplikasi web lengkap dengannya. Ada komponen komersial yang meningkatkan kinerja, namun tidak diperlukan. Misalnya, ada
desainer visual dan komponen CRUD untuk membantu Anda membuat tampilan lebih cepat. Anda dapat mencoba komponen ini secara gratis sebelum berlangganan.
Apakah Vaadin merupakan pengganti JSP dan JSF?
Ya. Ini dapat digunakan sebagai pengganti kerangka kerja JSP, JSF dan bahkan JavaScript seperti Angular. Banyak pelanggan Vaadin yang berhasil bermigrasi dari teknologi ini ke Vaadin.
Apakah Vaadin memiliki dukungan untuk Spring dan Jakarta EE?
Ya. Vaadin memiliki integrasi resmi dengan Spring dan Jakarta EE (sebelumnya Java EE). Anda dapat menambahkan Vaadin sebagai ketergantungan saat membuat proyek Spring Boot baru menggunakan Spring Initializr. Untuk Jakarta EE, Anda dapat mendownload contoh Hello, World sederhana yang menggunakan Jakarta EE. Pada saat artikel ini ditulis, hanya Jakarta EE versi 8 yang didukung.
Siapa yang menggunakan Vaadin?
Banyak perusahaan Fortune 500 menggunakan Vaadin, serta startup sukses dan lebih dari 200 ribu pengembang di seluruh dunia. Lihat
Panduan Memulai Cepat dan
dokumentasi Vaadin lainnya.
GO TO FULL VERSION