#java
Сравниваю так:
String s = "-123";
Boolean y = false;
if ("-".equals(s.charAt(0))){
y = true;
}
Результат: y=false
Почему?
Ответы
Ответ 1
Потому что Вы сравниваете разные типы. Метод 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);Ответ 2
Метод .charAt() ожидаемо возвращает не String, а char, который упаковывается (boxing) в класс Character. Character сам по себе не равен строке, даже если строка состоит из одного этого символа - это было бы неверно даже семантически, потому что строка, например, реализует интерфейс CharSequence.
Комментариев нет:
Отправить комментарий