Сравниваю так:
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);
Комментариев нет:
Отправить комментарий