| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > i.equals(d) |
| Автор: Entry_N3 3.3.2007, 15:33 |
| В одном из источников есть следующий вопрос-ответ: "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 выдается. В чем дело? Правильно ли я рассуждаю? |
| Автор: hamsterKSU 3.3.2007, 16:30 | ||||
http://www.javable.com/tutorials/fesunov/lesson8/ В случае D у тебя класс Double нелзя сравнить с Integer т.к. они разного типа. Добавлено @ 16:32 попробуй сделать
Добавлено @ 16:33 cannot cast from Double to Integer |
| Автор: Entry_N3 3.3.2007, 17:14 |
| hamsterKSU, я про это же. В ответе D (i.equals(d)) вернет true? |
| Автор: nornad 4.3.2007, 00:27 | ||||||
Почему должно возвращать true? true из equals возвращается тогда, когда объекты эквивалентны. Странно ты рассуждаешь. Если всё ещё не дошло, давай рассмотрим приведённый интовый equals:
|
| Автор: LSD 4.3.2007, 12:27 |
| В чем проблема? Берете компилятор и проверяете. Первые три варианта вообще не скомпилируются, а результат остальных можно посмотреть. |
| Автор: Entry_N3 4.3.2007, 17:39 |
| LSD, я смотрел, у меня false... а вот в источнике, написано, что true! Это меня и смутило. |
| Автор: LSD 4.3.2007, 23:22 |
| В данном случае компилятор истина в последней инстанции, если он говорит, что это будет true, то значит так оно и есть. А автор книги или банально ошибся, или имел в виду что-то совсем другое, но не удосужился это объяснить. |