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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сколько объектов будет создано 
V
    Опции темы
Samotnik
Дата 11.1.2012, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

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



Код

Boolean b1 = true;
Boolean b2 = true;
Boolean b3 = true;
Boolean b4 = true;
Boolean b5 = true;
Boolean b6 = true;
Boolean b7 = true;
Boolean b8 = true;
Boolean b9 = true;
Boolean b10 = true;
Boolean b11 = new Boolean(true);
Boolean b12 = new Boolean(true);
Boolean b13 = new Boolean(true);
Boolean b14 = new Boolean(true);

Ответ я знаю. Но почему так? По каким законам физикиJava? На первый взгляд кажется, что 4, из-за кэширования, но нет.  smile 


Это сообщение отредактировал(а) Samotnik - 11.1.2012, 00:27
PM MAIL   Вверх
temak
Дата 11.1.2012, 05:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



И какой же тут ответ? и почему именно такой?
PM MAIL   Вверх
Pretorian
Дата 11.1.2012, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Мне кажется 5 объектов. Для b1-b10 один объект и 4 для остальных.
PM   Вверх
dobrolub
Дата 11.1.2012, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Создаётся 4 объекта. 

b1 - b10 == Boolean.TRUE;

Boolean.TRUE, строго говоря не создаётся этим кодом при настройках используемых по умолчанию.
PM   Вверх
Samotnik
Дата 11.1.2012, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

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



dobrolub, тут будет 5 объектов.

Добавлено через 18 секунд
Цитата(Pretorian @  11.1.2012,  09:29 Найти цитируемый пост)
Мне кажется 5 объектов. Для b1-b10 один объект и 4 для остальных. 

верно, но вопрос был почему?
PM MAIL   Вверх
Pretorian
Дата 11.1.2012, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Для b1-b10 один кэшированный объект (т.е. все эти ссылки ссылаются на одно и тоже), а для остальных 4-ёх мы создаём отдельные объекты оператором new
PM   Вверх
Samotnik
Дата 11.1.2012, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

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



Pretorian, а есть ссылка на оф документацию?  smile 
PM MAIL   Вверх
Pretorian
Дата 11.1.2012, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Samotnik @  11.1.2012,  14:41 Найти цитируемый пост)
а есть ссылка на оф документацию?

к сожалению нет.
Об этом я прочитал в книге "Язык программирования Java и среда Netbeans" автор Монахов.
Выдержка из 7-ой главы:
Код

Удивительным может показаться факт, что результатом выполнения следующего фрагмента
String s1="Строка";
String s2="Строка";
if(s1==s2)
System.out.println("s1 равно s2");
else
System.out.println("s1 не равно s2");
будет вывод в консольное окно строки “s1 равно s2”. Дело в том, что оптимизирующий
компилятор Java анализирует имеющиеся в коде программы литерные константы, и для
одинаковых по содержанию констант использует одни и те же объекты-строки.

Это к вопросу о переменных b1-b10, почему они ссылаются на одно и то же.
Ну а с оператором new и так вроде понятно. С помощью него мы принудительно выделяем новую область памяти под объект. И тут уже не важно, что два объекта (созданных оператором new) могут иметь одинаковое содержимое.
PM   Вверх
Dummy
Дата 11.1.2012, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Samotnik @  11.1.2012,  12:41 Найти цитируемый пост)
Pretorian, а есть ссылка на оф документацию?  smile  

А вот: JLS, 3rd edition. Глава "5.1.7 Boxing Conversion", последняя фраза перед "Discussion":
Цитата

If the value p being boxed is true, false, a byte, a char in the range \u0000 to \u007f, or an int or short number between -128 and 127, then let r1 and r2 be the results of any two boxing conversions of p. It is always the case that r1 == r2.


PM MAIL   Вверх
Samotnik
Дата 11.1.2012, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

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



Dummy,  smile  Спаисбо !!! как раз и искал про диапазон -128 and 127 для int'a 
PM MAIL   Вверх
dobrolub
Дата 11.1.2012, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Мы пришли к конcенсусу, что на вопрос: "Сколько будет создано объектов?", правильный ответ  - 4?

Это сообщение отредактировал(а) dobrolub - 11.1.2012, 20:41
PM   Вверх
Samotnik
Дата 11.1.2012, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

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



dobrolub, нет
Цитата(Samotnik @  11.1.2012,  10:45 Найти цитируемый пост)
dobrolub, тут будет 5 объектов.

Ссылки b1 - b10 будут закэшированы, как ссылки на один объект. А b1 - b14 традиционно, тут нет ничего необычного.

Это сообщение отредактировал(а) Samotnik - 11.1.2012, 22:21
PM MAIL   Вверх
dobrolub
Дата 11.1.2012, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Повторю твой вопрос: "сколько объектов будет создано"?

Объект Boolean.TRUE (b1-b10) создаётся раньше чем твой код выполняется. Поэтому правильный ответ - 4 объекта создано ТВОИМ кодом. smile




PM   Вверх
Stolzen
Дата 12.1.2012, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Код

Boolean b1 = true;
Boolean b2 = true;
Boolean b3 = true;
Boolean b4 = true;
Boolean b5 = true;
Boolean b6 = true;
Boolean b7 = true;
Boolean b8 = true;
Boolean b9 = true;
Boolean b10 = true;
Boolean b11 = new Boolean(true);
Boolean b12 = new Boolean(true);
Boolean b13 = new Boolean(true);
Boolean b14 = new Boolean(true);

Object[] ar = {b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14 };
Set<Integer> objects = new HashSet<Integer>();

for (Object o : ar) {
    objects.add(System.identityHashCode(o));
}

System.out.println("total: " + objects.size());


Выводит 5


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
Pretorian
Дата 12.1.2012, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вот кстати документация об одинаковых литералах в коде JLS 3.10.5
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

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

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


 




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


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

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