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: