String dəyişəninə iki formada dəyər mənimsədə bilərik:
String name = "Cavid"; // String poolda saxlanılır String name = new String("Cavid"); // Yeni obyekt yaradılır
Concatenation
Yadda saxlanılmalı qaydalar:
- Əgər hər iki dəyişən (operand) numeric olarsa,
+
toplama əməliyyatını nəzərdə tutur; - Əgər dəyişənlərdən biri
String
olarsa,+
concatenation əməliyyatını nəzərdə tutur; - İfadə soldan sağa doğru hesablanır.
System.out.println(1 + 2); // 3 System.out.println("a" + "b"); // ab System.out.println("a" + "b" + 3); // ab3 System.out.println(1 + 2 + "c"); // 3c System.out.println(1 + 2 + "c"+ 1 + 2); // 3c12 int three = 3; String four = "4"; System.out.println(1 + 2 + three + four); // 64 String s = "1"; s += "2"; s += 3; System.out.println(s); //123 StringBuilder sb = new StringBuilder("Hello "); String s = "java!"; String welcome = sb + s; System.out.println(welcome); // Hello java!
Əgər +
operatorunun sağ və ya sol tərəfindəki dəyərlərdən biri String
tipindədirsə, run time vaxtı digər dəyər də String
`ə çevrilir. Aşağıdakı nümunəyə baxaq:
public static void main(String[] args) { System.out.print(null + true); // line1 System.out.print(true + null); // line2 System.out.print(null + null); // line3 System.out.print(getString() + true); // line4 } static String getString() { return null; }
line1
, line2
, line3
– compile olunmur, çünki aydındır ki, true
String
tip deyil, null
isə burada konflikt yaradır, konkret String
tipə aid etmək olmaz. Amma line 4 compile olunur, çünki null
String
tipə mənimsədilib və run edildikdə ekrana nulltrue
çap edilir.
Immutability
String
immutable dəyişəndir, yəni String obyekti bir dəfə yaradıldısa, sonradan dəyişdirilməyinə icazə verilmir, genişlənə və kiçilə bilməz. Həmçinin Java’da immutable class’lar final’dır.
String s1 = "1"; String s2 = s1.concat("2"); s2.concat("3"); System.out.println(s2); // 12
The String Pool
Ümumiyyətlə, String
dəyişənləri ən çox istifadə edilən dəyişənlərdən biridir və ümumi proqramda yaddaşın təxminən 25-40 faizini mənimsəyir. String pool (intern pool) – bütün stringləri toplamaq üçün JVM`də ayrılmış yerdir. String pool özündə ancaq literal dəyərləri tutur (contain).
[topics lang=az]