Sobes.tech
Intern

Строка дар Java чист?

sobes.tech AI

Ҷавоб аз AI

Дар дар Java — ин пайдарпайи рамзҳо мебошад. Он бо класи String ифода мешавад.

Хусусиятҳои асосӣ:

  • Нестаншаванда (Immutable): Пас аз сохтани объект String, мӯҳтавои он тағир дода намешавад. Ҳар гуна амалиёт, ки ба назар мерасад, ки мӯҳтавои сатрро тағир медиҳад (масалан, пайваст кардан), дар асл як объекти нав String месозад.
  • String Pool: Java String Pool (бозори сатрҳо)-ро барои идоракунии самараноки литералҳои сатр истифода мебарад. Вақте ки литералҳои сатр (масалан, "салом") сохта мешаванд, JVM аввал онро дар бозор ҷустуҷӯ мекунад. Агар аллакай вуҷуд дошта бошад, ба объекти мавҷуда ишора мекунад. Агар на, объект нав дар бозор сохта мешавад ва ишора ба он баргардонида мешавад.
  • Сохтани:
    • Бо истифода аз литерал: String s1 = "салом"; (аз String Pool истифода мекунад).
    • Бо истифода аз оператори new: String s2 = new String("дунё"); (як объект нав дар heap месозад, ҳатто агар "дунё" аллакай дар бозор бошад).
  • Мувофиқат: Барои муқоиса кардани мӯҳтавои сатрҳо, бояд методи equals() истифода шавад, на оператори ==. Оператор == ишораҳоро ба объектҳо муқоиса мекунад.

Масалан:

// Сохтани сатр бо истифода аз литерал (аз бозор)
String s1 = "Java";

// Сохтани сатр бо истифода аз `new` (объекти нав дар heap)
String s2 = new String("Java");

// Мувофиқат кардани мӯҳтаво (дуруст)
boolean мӯҳтавоМеболад = s1.equals(s2); // true

// Мувофиқат кардани ишораҳо (нодуруст барои мӯҳтаво)
boolean ишораҳоМеболад = (s1 == s2); // false

System.out.println("Мӯҳтаво якхела аст: " + мӯҳтавоМеболад);
System.out.println("Ишораҳо якхелаанд: " + ишораҳоМеболад);