JavaRush /Java блогу /Random-KY /С&Ж: Эмне үчүн Java'да сырсөздү Стринг эмес, символдор ма...

С&Ж: Эмне үчүн Java'да сырсөздү Стринг эмес, символдор массивинде сактоо жакшыраак?

Группада жарыяланган
Мындай суроону Java Junior кызматына берген маегинде угушуңуз мүмкүн. Бирок менин досума техникалык жетекчи кызматына интервью берип жатып сурашкан.
С&Ж: Эмне үчүн Java'да сырсөздү Стринг эмес, символдор массивинде сактоо жакшыраак?  - 1
, жана символдук массив экөө тең Stringтексттик маалыматтарды сактоо үчүн колдонулушу мүмкүн. Бирок белгилүү бир тапшырма үчүн тигил же бул нерсени аң-сезимдүү түрдө тандоо кыйынга турат, эгерде сиз дагы ушундай жагдайга туш боло элек болсоңуз. Бирок, досум белгилегендей, менен байланышкан ар кандай суроо String, адатта, саптардын өзгөрүлбөстүгү ( ) деп аталган өзгөчө касиетин камтыйт Immutableжана ал интервьюда ушундан пайдаланган. char []Андыктан, келгиле, сырсөзүңүздү сактоо үчүн эмес, колдонушуңуз керек болгон бир нече себептерди карап көрөлү String.

Себеп 1. Саптар өзгөрүлгүс

Java'да саптар өзгөрүлгүс болгондуктан, сиздин жөнөкөй тексттик сырсөзүңүз таштанды жыйноочу аны тазаламайынча эстутумда жеткorктүү болот. Жана Stringалар String poolкайра-кайра колдонуу үчүн колдонулгандыктан, сырсөз эстутумда узак убакытка калуу ыктымалдыгы жогору, бул таптакыр коопсуз эмес.
Java String бассейни - бул атайын жерде - үймөктө жайгашкан бассейн же an objectтердин (саптар) жыйындысы. Java тorндеги стринг эң кеңири таралган маалымат түрлөрүнүн бири. Бул примитивдүү тип эмес, an object, анткени ал ресурстарды көп талап кылат. Ошентип, төрт белгиден турган сапты сактоо үчүн 56 byte эстутум бөлүү керек. Мына ошондуктан саптар башка an objectилер сыяктуу үймөктө сакталат.
Эстутум таштандысына кирүү мүмкүнчүлүгү бар адам сырсөздү жөнөкөй тексттен таба алат, бул жөнөкөй тексттин ордуна шифрленген сырсөздү колдонууга жакшы себеп. Саптар өзгөрүлгүс болгондуктан, алардын мазмунун өзгөртүүгө болбойт. Ар кандай өзгөртүү жаңы линияны түзөт. Бирок учурда char [], анын каалаган элементтерин нөл же бош белги менен алмаштыра аласыз. Ошентип, сырсөздү символдор массивинде сактоо сырсөздү кармап калуу коркунучун азайтат.

2-себеп. Authorлордун сунуштары

Java өзү (албетте, анын жаратуучулары аркылуу) класстын ыкмасын колдонууну getPassword ()сунуштайт . Сиз ошондой эле эскирген ыкманы сынап көрүңүз . Эмне үчүн тил авторлорунун сунуштарын аткарууга болбойт? JPasswordFieldchar []getText ()

Себеп 3. Басып чыгаруу

Түрү менен Stringсапта сакталган текст журнал файлында же консолдо басылып чыгуу коркунучу ар дайым бар. Ошол эле учурда, колдонсоңуз Array, массивдин мазмунун эмес, анын эстутумдагы ордун гана басып чыгарасыз. Албетте, бул олуттуу себеп эмес, бирок дагы эле мааниси бар.
String strPassword = "Unknown";
char [] charPassword = new char [] {'U', 'n', 'k', 'w', 'o', 'n'};
System.out.println ("String password:" + strPassword);
System.out.println ("char password:" + charPassword);

String password: Unknown
Character password: [C@110b053
Албетте, char []сырсөздөрдү сактоо үчүн Java колдонуу панацея эмес. Сиз хэштер менен иштөө жана сырсөздөрдү жөнөкөй текстте сактоонун ордуна шифрлөө сыяктуу коопсуздук чараларын көрүшүңүз керек. Анан, албетте, аныктыгын текшерүү proceduresасынан кийин аны эстутумдан өчүрүңүз. Javarevisited материалдарынын негизинде
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION