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