Húrok Java-ban

Húrok

A karakterláncok karaktersorozatok. Java-ban az Stringa egy Object. A karakterláncokat nem szabad összetéveszteni, charmivel a karakterek szó szerint 1 értékek, nem pedig egy karaktersorozat. Még mindig használhat 1 értéket egy karakterláncon belül, azonban ezt inkább charakkor használja, ha 1 karaktert keres.

String course = "FCC"; System.out.println(course instanceof Object);

Kimenet:

true

Karakterlánc objektumot a következő módszerekkel hozhat létre:

  1. String str = "I am a String"; //as a String literal
  2. String str = "I am a " + "String"; //as a constant expression
  3. String str = new String("I am a String"); //as a String Object using the constructor

Gondolhat: Mi a különbség a három között?

Nos, a newkulcsszó használata garantálja, hogy új Stringobjektum jön létre, és új memóriahely kerül kiosztásra a Heapmemóriában (kattintson ide a további információkért). A karakterlánc-literálokat és az állandó karakterlánc-kifejezéseket a fordítás idején tároljuk. A fordító a String Literal Poolbe helyezi őket, hogy megakadályozzák az ismétléseket és javítsák a memóriafelhasználást. Az objektumok kiosztása drága, és ez a trükk növeli a teljesítményt, miközben példányosítja a karakterláncokat. Ha újra ugyanazt a szó szerinti szót használja, a JVM ugyanazt az objektumot használja. A fenti kivitelező használata szinte mindig rosszabb választás.

Ebben a kódrészletben hány String objektum jön létre?

String str = "This is a string"; String str2 = "This is a string"; String str3 = new String("This is a string");

A válasz: 2 karakterlánc objektum jön létre. strés str2mindkettő ugyanarra az objektumra utal. str3tartalma megegyezik, de newúj, különálló objektum létrehozását kényszerítik ki.

String literál létrehozásakor a JVM belsőleg ellenőrzi az úgynevezett the nevet String pool, hogy talál-e hasonló (tartalmi szempontból) String objektumot. Ha megtalálja, ugyanazt a hivatkozást adja vissza. Ellenkező esetben ez csak megy előre, és létrehoz egy új String objektumot a készletben, hogy a jövőben ugyanazt az ellenőrzést lehessen végrehajtani.

Kipróbálhatja ezt a fecskefagyás, gyors objektum-összehasonlítás ==és a megvalósított segítségével equals().

System.out.println(str == str2); // This prints 'true' System.out.println(str == str3); // This prints 'false' System.out.println(str.equals(str3)); // This prints 'true'

Itt van egy másik példa arra, hogyan hozhat létre karakterláncot a Java-ban a különböző módszerekkel:

public class StringExample{ public static void main(String args[]) { String s1 = "java"; // creating string by Java string literal char ch[] = {'s','t','r','i','n','g','s'}; String s2 = new String(ch); // converting char array to string String s3 = new String("example"); // creating Java string by new keyword System.out.println(s1); System.out.println(s2); System.out.println(s3); } }

Húrok összehasonlítása

Ha összehasonlítani szeretné két String változó értékét, akkor nem használhatja az == értéket. Ez annak a ténynek köszönhető, hogy ez a változók referenciáit fogja összehasonlítani, és nem a hozzájuk kapcsolódó értékeket. A Strings tárolt értékeinek összehasonlításához a metódus egyenlő.

boolean equals(Object obj)

Igaz, ha két objektum egyenlő és hamis, ellenkező esetben.

String str = "Hello world"; String str2 = "Hello world"; System.out.println(str == str2); // This prints false System.out.println(str.equals(str2); // This prints true

Az első összehasonlítás hamis, mert a „==” a hivatkozásokat nézi, és azok nem ugyanazok.

A második összehasonlítás azért igaz, mert a változók ugyanazokat az értékeket tárolják. Ebben az esetben „Hello world”.

Számos beépített módszerünk van a Stringben. Az alábbiakban bemutatunk egy példát a String Length () módszerre.

public class StringDemo { public static void main(String args[]) { String palindrome = "Dot saw I was Tod"; int len = palindrome.length(); System.out.println( "String Length is : " + len ); } }

Ennek eredményeként - String Length is : 17

A válasz: 2 karakterlánc objektum jön létre. Megjegyzések

  1. A karakterlánc-módszerek nulla alapú indexeket használnak, kivéve a substring().
  2. A String osztály végleges - a módszereket nem lehet felülbírálni.
  3. Amikor a JVM megtalálja a String literal szót, hozzáadódik a string literal poolhoz.
  4. A karakterlánc osztály rendelkezik egy metódus nevével length(), míg a tömbök attribútum-elnevezési hosszával rendelkeznek.
  5. A java-ban a string objektumok megváltoztathatatlanok. A megváltoztathatatlan egyszerűen módosíthatatlant vagy megváltoztathatatlant jelent. Miután létrehozta a string objektumot, annak adatait vagy állapotát nem lehet megváltoztatni, de új string objektum jön létre.

Karakterlánc hossza

A húr „hossza” csak a benne lévő karakterek száma. Tehát a „hi” értéke 2, a „Hello” pedig az 5. hosszúságú. A string () metódus egy stringen adja vissza a hosszát, így:

String a = "Hello"; int len = a.length(); // len is 5

A Stringen szintén használható egyéb összehasonlítási módszerek:

  1. equalsIgnoreCase (): - összehasonlítja a karakterláncot a kis- és nagybetűk érzékenységének figyelembevétele nélkül.
String a = "HELLO"; String b = "hello"; System.out.println(a.equalsIgnoreCase(b)); // It will print true
  1. CompareTo: - lexikografikusan összehasonlítja az értéket, és egy egész számot ad vissza.
String a = "Sam"; String b = "Sam"; String c = "Ram"; System.out.println(a.compareTo(b)); // 0 System.out.prinltn(a.compareTo(c)); // 1 since (a>b) System.out.println(c.compareTo(a)); // -1 since (c