Страницы

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

среда, 5 февраля 2020 г.

Класс String (valueof и проверка)

#java #строки


public class Test {
    public static void main(String[] args) {

       String str = String.valueOf(65);
       if(str.equals(str)){
           System.out.println("Меня зовут Ваня");
       }
    }
}


Правильно ли я проверил значение которое было целочисленное, а стало строковое (65)?
Если у нас сравнивается 1 (строка), значение,  можно ли использовать вот такую конструкцию: 

String str = String.valueOf(65);

       if(str.equals(str)){
           System.out.println("Меня зовут Ваня");
       }


И хотел еще спросить: equals() у нас сравнивает значение строк.
А == сравнивает ссылки на объекты?
    


Ответы

Ответ 1



Выражение: str.equals(str) всегда будет возвращать true, если str не равно null, т.к. строка сравнивается сама с собой. Если нужно проверить правильная ли получилась строка можете использовать такое условие: if("65".equals(str)) { .... equals() у нас сравнивает значение строк. А == сравнивает ссылки на объекты? Да.

Ответ 2



equals это в принципе метод, который обычно проводит массу проверок: обычно сначала проверяется, что сравниваемые объекты не нулевые (потому что даже null.euals(null) == false) что объекты принадлежат к одному классу не являются ли сравниваемые объекты одним и тем же объектом, тот самый случай, когда может быть obj1 == obj2 затем уже сравнивается внутреннее значение полей. В классе String метод equals после всех проверок на одинаковость классов сравнивает массивы байтов, полученные из строк: @HotSpotIntrinsicCandidate public static boolean equals(byte[] value, byte[] other) { if (value.length == other.length) { for (int i = 0; i < value.length; i++) { if (value[i] != other[i]) { return false; } } return true; } return false; } Но это все верно для хорошо реализованных классов, таких как String, идущих с Java "из коробки". Для новых классов, если вы не переопределите этот метод, equals будет работать по умолчанию как в родительском классе (скорее всего классе Object): public boolean equals(Object obj) { return (this == obj); } И в этом случае будет просто сравнивать ссылки. Имейте в виду такое коварство.

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

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