Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
danek130995
23 / 23 / 1
Регистрация: 25.05.2014
Сообщений: 850
#1

Отличие equals от (==) - Android

24.11.2015, 17:33. Просмотров 398. Ответов 4
Метки нет (Все метки)

Почему когда я и использую оператор сравнения для строк (==) он может не правильно работать? Но если я использую s1.equals(s2), тогда все нормально. Я посмотрел имплементацию метода equals в классе String:
Java
1
2
3
4
public boolean equals(Object other) {
        if (other == this) {
          return true;
        }
По сути-то тоже самое (==) используется. Помогите пожалуйста разобраться, в чем разница?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.11.2015, 17:33     Отличие equals от (==)
Посмотрите здесь:

Java equals и hashСode
Java SE string.equals() и ==
В чем отличие от Equals от оператора == C#
Java Hashcode и Equals
Java Equals() и == не работают
C# В чем отличие Gethashcode и equals
Android L: в чем отличие? Android
Java SE Метод equals
Отличие Fragment от View Android
Замена Ё на Е и Equals C#
Override Equals Java SE
Int и int[] в чем отличие? Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Паблито
2063 / 1805 / 562
Регистрация: 12.05.2014
Сообщений: 6,430
Завершенные тесты: 1
24.11.2015, 17:41     Отличие equals от (==) #2
а дальше что в методе ты читать не стал?
danek130995
23 / 23 / 1
Регистрация: 25.05.2014
Сообщений: 850
24.11.2015, 19:30  [ТС]     Отличие equals от (==) #3
Паблито, точно, забыл посмотреть ниже:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
    @Override public boolean equals(Object other) {
        if (other == this) {
          return true;
        }
        if (other instanceof String) {
            String s = (String)other;
            int count = this.count;
            if (s.count != count) {
                return false;
            }
            // TODO: we want to avoid many boundchecks in the loop below
            // for long Strings until we have array equality intrinsic.
            // Bad benchmarks just push .equals without first getting a
            // hashCode hit (unlike real world use in a Hashtable). Filter
            // out these long strings here. When we get the array equality
            // intrinsic then remove this use of hashCode.
            if (hashCode() != s.hashCode()) {
                return false;
            }
            for (int i = 0; i < count; ++i) {
                if (charAt(i) != s.charAt(i)) {
                    return false;
                }
            }
            return true;
        } else {
            return false;
        }
    }
Непонятным остается, что за count. Что такое s.count? Как мы можем к строке применить s.count?? Я пробовал написать String s; s.count, но ничего. И что за this.count? Я посмотрел выше, у класса String поле count пустое(к которому почему-то нельзя обратится, как я писал выше)
Паблито
2063 / 1805 / 562
Регистрация: 12.05.2014
Сообщений: 6,430
Завершенные тесты: 1
24.11.2015, 19:40     Отличие equals от (==) #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
count это же длина строки, где инициализируется я не знаю, но count возвращает метод lenght()
danek130995
23 / 23 / 1
Регистрация: 25.05.2014
Сообщений: 850
24.11.2015, 19:56  [ТС]     Отличие equals от (==) #5
Паблито, а, все, дошло. this.count это длина строки, к которой применяем equals(). А s.count - длина строки, которую послали на вход equals(). Понятное дело, что поле count изначально не инициализировано - оно инициализируется, когда создается строка. А так как count - private, то вернуть его можно только через length().
Спасибо большое!
Yandex
Объявления
24.11.2015, 19:56     Отличие equals от (==)
Ответ Создать тему
Опции темы

Текущее время: 11:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru