1. Солиштиришлар
Жуда кўп ҳолларда дастурчига турли ўзгарувчиларни бир-бири билан солиштириш керак бўлади. Ва сиз аллақачон кўриб чиқиб бўлганингиздек, ҳамма нарса бир қадар тушунарсиз бўлиши мумкин.
Бутун сонларни солиштириш жуда осон — шунчаки == дан фойдаланинг ва ҳаммасини қилаверанг. Ҳақиқий сонларни солиштиришда сиз уларнинг фарқини (аниқроғи, фарқнинг модулини) муҳокама қиладиган жуда кичик бир сон билан солиштиришингизга тўғри келади.
Сатрларни солиштириш янада мураккаброқ. Бунинг сабаби шундаки, авваламбор, сатрлар — объектлар, иккинчидан, вазиятга кўра дастурчи кўпинча сатрларни солиштиришда маълум омилларни ҳисобга олиш ёки уларни инкор этишни хоҳлайди.
2. Сатрларнинг хотирада жойлашиши
Тақиқайтингез, сатирлар хотирада бутун ва ҳақиқий сонлар каби сақланмайди:

Сатрларни сақлаш учун икки блокли хотира фойдаланилади: бир блок ўзи матнни сақлайди (ҳаракат матни ҳажмига боғлиқ), иккинчи блок (ўлчами 4 байт) биринчи блокнинг манзилини сақлайди.
Кўп тажрибали дастурчи бундай ҳолатда шунга ўхшаш бир нарса айтади: «String туридаги str ўзгарувчиси String туридаги объектга ишора сифатида сақлайди».
3. Сатрларга ишораларни таълимлаш
Бу усулнинг афзаллиги аниқлашади, агар сиз бир сатрли ўзгарувчига бошқа бир сатрли ўзгарувчини таълимлашингиз керак бўлса. Мисол:
String text = "Бу жуда муҳим хабар";
String message = text;
Бу операция натижаси ўзида хотирада:
Бу ишора берилгандан сўнг String объекти қолади, қаерда бўлган бўлса, ўша ерда қолади, аммо message ўзгарувчисида унинг фақат манзили (объектга ишора) нусхаланади.
4. Ишоралар ва объектлар билан ишлаш
Агар сиз сатрни катта ҳарфларга ўзгартиришга қарор қилсангиз (катта ҳарфлар), Java-машина ҳаммасини тўғри қилиб қўяди: сизда String туридаги икки объект бўлади, ва text ва message ўзгарувчилари манзилларни сақлайди: ҳар бири ўз объектига.
Мисол:
String text = "Бу жуда муҳим хабар";
String message = text.toUpperCase();
Бу натижада ўзида хотирада бўлади:

Эътибор қилингизки, toUpperCase() методи ўзгармайди у сатрни, қайси билан у чақирилди. Унинг ўрнига у янги сатр (янги объект) яратади ва унга ишора қайтаради.
Ёки яна бир қизиқарли мисол. Масалан, сиз сатрни Scanner туридаги объектга узатишга қарор қилдингиз (шу ердан у ўқиш қимматини олади).
Мисол:
String text = "10 20 40 80";
Scanner console = new Scanner(text);
int a = console.nextInt();
int b = console.nextInt();
Класс Scanner ишлашини батафсил ўрганиш учун шўнда қизиқарли топишмоқ.
Бу ҳаммасини хотирада нимага қаратилади:

Бу вақтда String туридаги объект как бўлганидан қолади — ўзида ёзилади ва унинг рақамлари у ерда — у ерда кўрсатилади ва сақланади.
5. String туридаги объектлар учун ишораларни солиштириш
Ҳа энди энг қизиқарлигига келиб етдик — сатрларни солиштириш.
Сатр ўзгарувчиларини солиштириш учун икки оператордан фойдаланиш мумкин: == (тенг) ва != (тенг эмас). «Катта», «кичик», "катта ёки тенг" операторлари фойдаланилмайди — компилятор рухсат бермайди.
Аммо қизиқарли нюанс бор: бизда қандай сатр ўзгарувчилари қайд этилган? Тўғри: объектларга ишоралар. Мана шу ишоралар солиштирилади:
String text = "Салом";
String message = text;
String s1 = text.toUpperCase();
String s2 = text.toUpperCase();
Мана бу хотирада нима бўлади:

message ва text ўзгарувчилари бир объектни (қимматни) манзилини сақлаб беради. Аммо s1 ва s2 ўзгарувчилари бир хил ҳужжатни ишораларини сақлайди, аммо бир-биридан бошқа объектни ишорасына олади.
Агар сиз кодда ушбу 4 ўзгарувчини солиштирсангиз, сиз бундай натийжаларни оласиз:
| Код | Экранга чиқариш |
|---|---|
|
|
GO TO FULL VERSION