Форум программистов, компьютерный форум, киберфорум
Наши страницы
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/2: Рейтинг темы: голосов - 2, средняя оценка - 5.00
iSmokeJC
Модератор
Эксперт Java
2076 / 1057 / 478
Регистрация: 21.10.2017
Сообщений: 3,281
1

Сравнение строк (String) в java. Мини гайд для начинающих

27.08.2018, 18:08. Просмотров 488. Ответов 4

Всем привет!

Одна из самых распространенных ошибок начинающих, выражаемая в очень частых темах типа – «не работает условие…», является ошибка сравнения строк (String).

Попробую максимально просто объяснить, что с ними не так.

Во-первых. Строка – это объект. Именно объект, а не примитив (такой как int, например).
Поэтому, даже если две строки содержат одинаковый набор символов, они представляют собой два разных объекта! Соответственно «==» будет давать false, объекты-то не одни и те же!

Но иногда такое сравнение работает. Почему? Попробуем разобраться.
Java
1
2
3
String s1 = “hello”;
String s2 = “hello”;
System.out.println(s1 == s2);   //true
При таком создании строк (через литералы), данный набор символов помещается в так называемый пул строк, и переменным присваивается ссылка на этот набор. Т.е. ссылки будут одинаковые и == даст true.

Но если мы сделаем, например, так:
Java
1
2
3
String s1 = “hello”;
String s2 = new String (“hello”);
System.out.println(s1 == s2);   //false
Т.к. будет принудительно создан новый объект, переменные будут иметь разные ссылки.


Вывод: если не хотите заморачиваться, для сравнения строк нужно использовать метод equals(), он посимвольно сравнивает строки и дает true при полном совпадении:
Java
1
2
3
String s1 = “hello”;
String s2 = new String (“hello”);
System.out.println(s1.equals(s2));  // true
Разница в этих подходах в быстродействии (== работает ессно, быстрей), но в большинстве случаев, особенно у начинающих это абсолютно не критично.

Надеюсь, объяснил понятно. Всем добра!
7
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.08.2018, 18:08
Ответы с готовыми решениями:

Сравнение слов в массиве строк Java
Добрый день! Помогите пожалуйста с задачей.) "В файле содержатся фамилии людей. Нужно считать их из...

Java для начинающих
С чего начать ?

Java для начинающих
Есть функция f(int arr,int x,int y). На вход она принимает матрицу и две координаты (по строке и по...

Самоучитель java для начинающих.
Пожалуйста, подскажите где взять нормальный самоучитель java, не понимаю, что это за язык((( P.S....

Книги по Java для начинающих
Подскажите пожалуйста какие книги вы посоветовали бы начинающему в изучении Java

4
sdasdaw
59 / 50 / 12
Регистрация: 14.03.2017
Сообщений: 87
27.08.2018, 18:10 2
Добавлю свои 2 цента:
Пул строк потребляет больше памяти, нежели хранение строк по id в каком нибудь массиве.
Примерно на 15 Мб, каждые 100,000 ссылок.
2
Aviz__
746 / 548 / 153
Регистрация: 17.02.2014
Сообщений: 3,259
06.09.2018, 12:03 3
Иногда строку, допустим полученную с клавиатуры inputUser, нужно сравнивать со строковым литералом, скажем "Yes".
Это лучше сделать так:
Java
1
"Yes".equals(inputUser)
0
Welemir1
06.09.2018, 12:33
  #4

Не по теме:

Цитата Сообщение от Aviz__ Посмотреть сообщение
Это лучше сделать так:
ты главное не объясняй почему) новичкам же не интересно

0
Aviz__
746 / 548 / 153
Регистрация: 17.02.2014
Сообщений: 3,259
06.09.2018, 12:39 5
Цитата Сообщение от Welemir1 Посмотреть сообщение
не объясняй почему
Договорились, про возможный inputUser = null, можешь рассказать сам)).
0
06.09.2018, 12:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.09.2018, 12:39

Java FAQ: для начинающих
Привет всем форумчанам,в этом Java FAQ,е постараюсь собрать все самое нужное о Java) Для начала...

задача Java для начинающих. Шилдт Г. ошибка?
Ребята возможно баян. Но правда ль выходит в варианте ответа на стр 559 для поиска простого числа...

Реализовать «синхронные» методы чтения/записи для переменной типа String в java
Всем Здорова! Тут такая проблемка, нужно реализовать методы чтения/ записи для переменной типа...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru