Junior
Mis on stringide bassein Java's?
sobes.tech AI
Vastus AI-lt
String Pool on JVM heap'i piirkond, kus hoitakse stringi literaale. Kui JVM kohtab stringi literaali, kontrollib ta esmalt seda panka. Kui string juba eksisteerib, tagastatakse viide olemasolevale objektile. Kui mitte, luuakse uus stringi objekt pangas ja tagastatakse viide sellele.
Eelised:
- Mälu säästmine: Mitmed viited võivad viidata ühele ja samale stringi objektile pangas.
- Jõudlus: Viidete võrdlemine (==) pangast pärit stringide puhul on kiirem kui stringi sisu võrdlemine (equals()).
Näide:
// Loob stringi pangas (kui seda veel pole)
String s1 = "hello";
// Tagastab viite sama objekti "hello" pangast
String s2 = "hello";
// s1 ja s2 viitavad samale objekti
System.out.println(s1 == s2); // Kuvab true
// Loob uue stringi objekti "hello" heap'is, mitte pangas
String s3 = new String("hello");
// s1 ja s3 viitavad erinevatele objektidele
System.out.println(s1 == s3); // Kuvab false
// Stringide sisu on sama
System.out.println(s1.equals(s3)); // Kuvab true
Meetod intern() saab kasutada, et otseselt lisada string, mis on loodud new String() abil, panka või saada viide olemasolevale stringile panga sarnase sisuga.
// Loob uue stringi objekti "world" heap'is
String s4 = new String("world");
// Lisab "world" panka (kui seda veel pole) ja tagastab viite
String s5 = s4.intern();
// Loob stringi pangas (viide samale objektile, millele nüüd viitab s5)
String s6 = "world";
// s5 ja s6 viitavad samale objekti pangas
System.out.println(s5 == s6); // Kuvab true