Sobes.tech
Junior

պատմեք ինձ Java ծրագրավորման լեզվում String դասի մասին։

sobes.tech AI

Պատասխան AI-ից

Java-յի String դասը փոփոխական չհանդիսացող տողերի հաջորդականություն է:

Հիմնական հատկանիշներն ու առանձնահատկությունները՝

  • Փոփոխական չլինել (Immutability): String օբյեկտի ստեղծումից հետո նրա պարունակությունը փոփոխել հնարավոր չէ: Ամեն մի գործողություն, որը թվում է, թե փոփոխում է տողը (օրինակ, միակցում), իրականում ստեղծում է նոր String օբյեկտ: Սա մեծացնում է անվտանգությունը և բծախնդրությունը՝ հատկապես բազմաթելային ծրագրավորման ժամանակ:
  • + օպերատորի վերագում: Տողերի համար + օպերատորը վերագրված է միակցման համար:
  • Երկու եղանակ ստեղծելու համար:
    • Տողային լիտերալով՝ String s1 = "Hello"; - ստեղծվում է տողային պուլում:
    • new օպերատորով: String s2 = new String("World"); - ստեղծվում է հողային հիշողության մեջ, կարող է ստեղծվել նոր օբյեկտ՝ նույնիսկ եթե նույն լիտերալը արդեն կա պուլում:
  • Տողային պուլ (String Pool): Հողային հիշողության հատված, որտեղ պահվում են տողային լիտերալները՝ հիշողության արդյունավետ օգտագործման համար: Տողը ստեղծելիս JVM-ը նախ ստուգում է պուլը: Եթե նման տող արդեն կա, այն վերադարձնում է հղում առկա օբյեկտին: Եթե չկա, ստեղծում է նոր և ավելացնում պուլին:
  • Հիմնական օգտակար մեթոդները:
    • length(): Վերադարձնում է տողի երկարությունը:
    • charAt(int index): Վերադարձնում է նշված ինդեքսի նշանը:
    • substring(int beginIndex, int endIndex): Վերադարձնում է ենթատող:
    • contains(CharSequence s): Ստուգում է, արդյոք տողը պարունակում է նշված հաջորդականությունը:
    • indexOf(int ch) / indexOf(String str): Վերադարձնում է առաջին հանդիպման ինդեքսը:
    • equals(Object anObject): Համեմատում է տողերի պարունակությունը: Կարևոր է օգտագործել equals() պարունակության համեմատության համար, ոչ թե ==, որը համեմատում է հղումները:
    • equalsIgnoreCase(String anotherString): Համեմատում է տողերը՝ անտեսելով մեծատառ-փոքրատառ տարբերությունները:
    • replace(char oldChar, char newChar) / replace(CharSequence target, CharSequence replacement): Փոխարինում է նշաններ կամ ենթատողեր:
    • trim(): Հեռացնում է բացատները սկզբից և վերջից:
    • split(String regex): Բաժանում է տողը ենթատողերի:

Օրինակներ ստեղծելու և որոշ գործողությունների:

// Լիտերալով ստեղծում
String str1 = "Java";

// `new`-ով ստեղծում
String str2 = new String("Java");

// Միակցում
String str3 = str1 + " is amazing";

// պարունակության համեմատություն (օգտագործում ենք `equals`, ոչ `==`)
boolean areEqualContent = str1.equals(str2); // true

// հղումների համեմատություն (օգտագործում ենք `==`)
boolean areEqualReference = (str1 == str2); // false

// տողի երկարություն
int length = str3.length();

// նշանի ստացում
char firstChar = str1.charAt(0); // 'J'

// պարունակության ստուգում
boolean containsIs = str3.contains("is"); // true

String-ի փոփոխական չլինելը կարող է հանգեցնել արդյունավետության անկումի՝ քանի որ յուրաքանչյուր փոփոխության ժամանակ ստեղծվում է նոր օբյեկտ: Այդպիսի դեպքերում ավելի լավ է օգտագործել StringBuilder կամ StringBuffer: