1-modul · 8-dars: String — 2-qism
Daraja: Boshlang'ich
String — 2-qism. Java Core bo‘yicha nazariya, amaliy namuna va mustaqil mashq.
Tushuntirish
## Dars maqsadi String — 2-qism tushunchalarini farqlash, nima uchun kerakligini izohlash va kichik misolda qo‘llash.
## Nazariya Heap ichidagi maxsus hudud — string literal lar shu yerda saqlanadi va qayta ishlatiladi.
Qo'shtirnoq ichida bevosita yozilgan string: `"Hello"`.
## Intervyuga tayyorgarlik ### Java-da String Constant pool nima? Heap ichidagi maxsus hudud — string literal lar shu yerda saqlanadi va qayta ishlatiladi.
### Java-da String literal nima? Qo'shtirnoq ichida bevosita yozilgan string: `"Hello"`.
### String literal xotirada qanday saqlanadi? String pool da saqlanadi; bir xil literal bir marta saqlanib, boshqa joylar shu nusxaga havola qiladi.
### Nima uchun Java String literaldan foydalanadi? Xotira tejash uchun — bir xil qiymatlar takrorlanmasdan, bitta nusxada saqlanadi.
### `String s = new String("Hello")` — nechta obyekt yaratiladi? 2 ta (agar `"Hello"` pool da bo'lmasa): biri pool dagi literal, biri heap dagi `new` obyekt. Agar pool da avvaldan bo'lsa — 1 ta (faqat heap da).
### new String("Scientech") ×2 va literal ×2 — nechta obyekt? 3 ta: `new` ikki marta 2 ta alohida heap obyekt yaratadi; `"Scientech"` literal pool da 1 ta bo'ladi (s3 va s4 uni bo'lishadi). Jami 3.
### String class qanday interfacelardan implement olgan? `Serializable`, `Comparable<String>`, `CharSequence`.
### String Thread-safe mi? Ha. Immutable bo'lgani uchun avtomatik ravishda thread-safe.
### String class-ning kamchiliklari? Immutable bo'lgani uchun har bir o'zgartirishda yangi obyekt yaratiladi — ko'p o'zgartirishda xotira va vaqt isrof bo'ladi. Shuning uchun `StringBuilder` ishlatiladi.
### String wrapper class mi? Yo'q. String — alohida class; u primitive turni o'ramaydi.
### String intern() method nima uchun ishlatiladi? String ni pool ga joylash yoki pooldagi mavjud nusxaga havola olish uchun. `==` bilan solishtirishda foydali.
## Versiya va aniqlik Java misollari Java 17 bazasiga mo‘ljallangan. JDK/JRE paketlash usuli distributivga bog‘liq; JVM bayt-kodni interpretatsiya va JIT orqali bajarishi mumkin. GC uchun aniq bajarilish vaqtiga kafolat yo‘q; finalization resurs yopish usuli emas. Thread stop/suspend/resume kabi eski metodlar amaliy yechim emas. Koddagi import, klass yoki tashqi kutubxona kontekstini tekshiring.
## Manbalar [Moduldagi savollar yo‘nalishi](https://github.com/jlkesh/pdp_online_java_lessons/blob/main/interviewquestions/1-module.md) [Rasmiy qo‘llanma](https://dev.java/learn/) [Sizning avvalgi savol-javob arxivingiz](https://lightyer.uz/java/interview.html)
Kod quyida o‘quv namunasi sifatida berilgan. To‘liq ilova uchun import, dependency va konfiguratsiya kerak bo‘lishi mumkin. SQLni faqat ajratilgan test bazasida bajaring.
Kod misoli
String a = new String("Java");
String b = new String("Java");
System.out.println(a == b); // false
System.out.println(a.equals(b)); // true
System.out.println(new StringBuilder().append(a).append(17));
Keng tarqalgan xatolar
- `new String("a")` ishlatish: bu pool dagi literaldan tashqari ortiqcha obyekt yaratadi.
- Pool dagi literallar `==` bilan teng chiqqaniga qarab, hamma String ni shunday solishtirish mumkin deb xulosa qilish.
Mashqlar
- `String a = "x"; String b = "x"; String c = new String("x");` uchun `==` natijalarini oldindan ayting.
- `c.intern() == a` nima qaytarishini tekshiring va sababini yozing.
Teglar: pdp, nazariya, modul-01