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

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

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

Отличие equals от (==) - Программирование Android

24.11.2015, 17:33. Просмотров 429. Ответов 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 от (==)
Посмотрите здесь:

Android L: в чем отличие? - Программирование Android
Народ! Кто нибудь ковырял это чудо? СДК другое или такое же? В чем координальные отличия, кроме новой ВМ?

Отличие Fragment от View - Программирование Android
В чем принципиальное отличие фрагментов от View?? Почему нельзя стоить интерфейс просто на View а нужно использовать фрагменты??

Int и int[] в чем отличие? - Программирование Android
подскажите в нете понятной инфы не нашел(

В чем отличие от Equals от оператора == - C#
Все объекты поддерживают открытый метод Equals, который позволяет сравнить объекты на равенство, однако это же можно сделать и с помощью...

В чем отличие Gethashcode и equals - C#
я не сильно понимаю зачем эти 2 метода?Ну сравню я обьекты через equals,зачем мне сравнивать через gethashcode? Какое преемущество он дает?

Переопределение equals - Java SE
Добрый день, товарищи. Пытаюсь переопределить метод "equals" во вновь созданном классе. package i1; import java.util.Objects; ...

Override Equals - Java SE
Вот в чем проблема,хочу перегрузить этот метод для моего класса,но IDEA пишет,что method doesnt override method from its superclass. Вот...

Замена Ё на Е и Equals - C#
Всем добрый день. Возможно тема уже поднималась но ответ на свой вопрос найти не смог. А состоит он в следующем: есть строка текста. В ней...

string.equals() и == - Java SE
String s1=new String("aaa"); String s2=new String("aaa"); if (s1==s2) System.out.print("true"); else...

equals и hashСode - Java
Что это такое?

Equals() и == не работают - Java
Только начал учить Java и столкнулся с проблемой сравнивания строк (не ссылок на них) и не могу понять где ошибка: void loadText() { ...

Метод equals - Java SE
Правильно ли я тут определил метод equals, если у меня есть наследование? public class Vegetable extends Plant { private int calories;...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Pablito
2421 / 1866 / 583
Регистрация: 12.05.2014
Сообщений: 6,606
Завершенные тесты: 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 пустое(к которому почему-то нельзя обратится, как я писал выше)
Pablito
2421 / 1866 / 583
Регистрация: 12.05.2014
Сообщений: 6,606
Завершенные тесты: 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 от (==)
Ответ Создать тему
Опции темы

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