OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Суббота, 27 Апрель, 2024 07:35

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Интуитивно понятная ява.
СообщениеДобавлено: Пятница, 01 Октябрь, 2010 01:54 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Код:
import java.*;
 
class Test {
   public static void main(String[] args) {
      Integer a = 42;
      Integer b = 42;
      Integer c = 420;
      Integer d = 420;
      System.out.println(a==b); // true
      System.out.println(c<=d); // true
      System.out.println(c>=d); // true
      System.out.println(c==d); // false
   }
}


Без коментариев.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Интуитивно понятная ява.
СообщениеДобавлено: Пятница, 01 Октябрь, 2010 08:16 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Хочется прям возопить: ДОКОЛЕ???!!!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Интуитивно понятная ява.
СообщениеДобавлено: Пятница, 01 Октябрь, 2010 08:37 

Зарегистрирован: Пятница, 24 Апрель, 2009 16:28
Сообщения: 563
Откуда: Москва
Было бы интересно узнать версии и параметры окружения.
Если разберетесь в причинах, отпишитесь - интересно (сам я с ней не работаю).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Интуитивно понятная ява.
СообщениеДобавлено: Пятница, 01 Октябрь, 2010 09:17 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Peter Almazov писал(а):
Было бы интересно узнать версии и параметры окружения.

Не зависит.
Peter Almazov писал(а):
Если разберетесь в причинах, отпишитесь - интересно (сам я с ней не работаю

Ну, тут на самом деле всё очень просто. Integer, это вам не int, это вполне себе класс.
В яве == для ссылочных типов (ака классов) всегда сравнивает ссылки, а не содержимое классов.
Код:
Integer a = 420;

Тут происходит автобоксинг. Грубо говоря вызывается конструктор класса Integer с аргументом 420.
Код:
a<=b;

Тут произойдет автоанбоксинг. Т.е. из 'a' и 'b' (Integer) вытащат содержащееся там число (int) и сравнят.

Итак, a==b сравнит ссылки, a<=b сравнит содержимое.

Замечу, что Integer нифига не обычный класс, ибо вообще говоря, перегружать операторы в яве нельзя.

Однако остается непонятным почему при a=42 мы имеем таки true. Всё также просто -- по всей видимости объекты для всех чисел что влезают в один байт (-128 ... 127) уже созданы. Соответственно когда мы пишем Integer a = 42, ничего создаваться не будет, 'a' будет просто указывать на уже готовый объектик. Также как и Integer b = 42. Объект один и тот же, поэтому (a==b) == true.


Последний раз редактировалось Alexey Veselovsky Пятница, 01 Октябрь, 2010 13:47, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Интуитивно понятная ява.
СообщениеДобавлено: Пятница, 01 Октябрь, 2010 09:23 

Зарегистрирован: Воскресенье, 03 Февраль, 2008 12:50
Сообщения: 249
У мну на 1.6.20 тот же результат. Я так понимаю, тут дело в том, что сравниваются величины не примитивных типов (int), а соотв. ссылочные типы (Integer).

А такое поведение оператора сравнения, видимо, объясняется вот чем. Как мы знаем, в Java == compares references, not values. Для малых чисел (диапазон, возможно, нагуглится) заранее создаются соотв. объекты в единственном экземпляре. И любой новый объект Integer с малым intValue указывает на одно и тоже место. А для больших чисел - просто создаются новые объеты. В Пистоне также по-моему (но сравнение по-другому работает).

Код:
System.out.println(c.intValue()==d.intValue()); // true


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Интуитивно понятная ява.
СообщениеДобавлено: Пятница, 01 Октябрь, 2010 09:27 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Замечу, что автобоксинг и автоанбоксинг -- это по сути неявное преобразование типов. Отсюда и все беды.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Интуитивно понятная ява.
СообщениеДобавлено: Пятница, 01 Октябрь, 2010 10:38 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 1449
Откуда: Киев
Peter Almazov писал(а):
Было бы интересно узнать версии и параметры окружения.
Если разберетесь в причинах, отпишитесь - интересно (сам я с ней не работаю).

Начиная с версии 1.5 . До этого автобоксинга не было, и пример бы не скомпилировался.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Интуитивно понятная ява.
СообщениеДобавлено: Пятница, 01 Октябрь, 2010 12:34 

Зарегистрирован: Пятница, 24 Апрель, 2009 16:28
Сообщения: 563
Откуда: Москва
Гениально! Язык развиваецца...


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB