Страницы

Поиск по вопросам

пятница, 29 марта 2019 г.

Почему результат сравнения строк неправильный?

Сравниваю так:
String s = "-123"; Boolean y = false; if ("-".equals(s.charAt(0))){ y = true; }
Результат: y=false
Почему?


Ответ

Потому что Вы сравниваете разные типы.
Метод charAt(...) возвращает значение типа char, которое автоупаковывается в объектный Character и Вы этот объект сравниваете со объектом типа String, в результате несовпадения типов Вы и получаете такой результат.
Посмотрите исходный код метода String.equals(...)
public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String)anObject; int n = value.length; if (n == anotherString.value.length) { char v1[] = value; char v2[] = anotherString.value; int i = 0; while (n-- != 0) { if (v1[i] != v2[i]) return false; i++; } return true; } } return false; }
Первое условие ложно, второе – тоже ложно, в результате метод возвращает false
Добиться желаемого поведения, можно, например, так:
if ("-".equals(String.valueOf(s.charAt(0)))){ y = true; }
UPD
Мне нужно узнать, есть ли в строке определенный символ?
String s = "123"; char c = '2'; boolean contains = s.contains(String.valueOf(c));
или так:
String s = "123"; String c = "2"; boolean contains = s.contains(c);

Комментариев нет:

Отправить комментарий