Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> i.equals(d), правилен ли ответ D в данном примере 
:(
    Опции темы
Entry_N3
  Дата 3.3.2007, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 446
Регистрация: 8.2.2007

Репутация: нет
Всего: нет



В одном из источников есть следующий вопрос-ответ:

"Given:
Integer i = new Integer (42);
Long l = new Long (42);
Double d = new Double (42.0);

Which two expressions evaluate to True? (Choose Two)
A. (i ==l)
B. (i == d)
C. (d == l)
D. (i.equals(d))
E. (d.equals(i))
F. (i.equals(42))
Answer: D, E"

В классе-оболочки Integer есть 
    public boolean equals(Object obj) {
    if (obj instanceof Integer) {
        return value == ((Integer)obj).intValue();
    }
   return false;

Ведь ссылка obj в данном случае указывает на объект типа Double, и, следовательно, объект, на который указывает obj, не является экземпляром класса Integer. Т.е. в данном случае (obj instanceof Integer) равно false. Т.е. вариант D не работает.

Я проделываю, например D вариант, и у меня false выдается. В чем дело? Правильно ли я рассуждаю?
PM MAIL   Вверх
hamsterKSU
Дата 3.3.2007, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 401
Регистрация: 20.10.2006
Где: Украина, Херсон

Репутация: 1
Всего: 11



Цитата

В Java для проверки типа объекта есть операция instanceof . Она часто применяется при понижающем (downcasting) преобразовании. Эта операция проверяет, имеет ли ее левый операнд класс, заданный правым операндом.

взял отсюда

В случае D у тебя класс Double нелзя сравнить с Integer т.к. они разного типа.

Добавлено @ 16:32 
попробуй сделать 
Код
i = (Integer)d;
 компилятор заматерится

Добавлено @ 16:33 
cannot cast from Double to Integer
PM MAIL ICQ   Вверх
Entry_N3
Дата 3.3.2007, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 446
Регистрация: 8.2.2007

Репутация: нет
Всего: нет



hamsterKSU, я про это же. В ответе D (i.equals(d)) вернет true?
PM MAIL   Вверх
nornad
Дата 4.3.2007, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

Репутация: 16
Всего: 31



Цитата(Entry_N3 @  3.3.2007,  20:14 Найти цитируемый пост)
В ответе D (i.equals(d)) вернет true

Почему должно возвращать true? true из equals возвращается тогда, когда объекты эквивалентны. Странно ты рассуждаешь.
Если всё ещё не дошло, давай рассмотрим приведённый интовый equals:
Код

public boolean equals(Object obj) {
    if (obj instanceof Integer) {
        return value == ((Integer)obj).intValue();
    }
   return false;
}
  • Код

    if (obj instanceof Integer)

    Так как obj пришёл Double, то условие неверно и внутрь условного блока мы не заходим.
  • Код

    return false;

    Как-то не очень похоже на true, верно?  smile



--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
LSD
Дата 4.3.2007, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



В чем проблема?
Берете компилятор и проверяете. Первые три варианта вообще не скомпилируются, а результат остальных можно посмотреть.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Entry_N3
Дата 4.3.2007, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 446
Регистрация: 8.2.2007

Репутация: нет
Всего: нет



LSD, я смотрел, у меня false... а вот в источнике, написано, что true! Это меня и смутило.
PM MAIL   Вверх
LSD
Дата 4.3.2007, 23:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



В данном случае компилятор истина в последней инстанции, если он говорит, что это будет true, то значит так оно и есть.
А автор книги или банально ошибся, или имел в виду что-то совсем другое, но не удосужился это объяснить.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0500 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.