Вниз  Java-программирование (1-ые посты)
- 20.10.2015 / 18:35
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
DominaN, (pix & 0xFF000000)
__________________
 let live
- 21.10.2015 / 14:14
Askalite
  Пользователь

Askalite 
Сейчас: Offline
Что за ???

  Сравниваю числа. Причём до 127 всё норм, сравнивается нормально. Но с 127 начинается бред.
- 21.10.2015 / 14:30
Freddy
  Пользователь

Freddy 
Сейчас: Offline
Askalite, byte переполняется?
- 21.10.2015 / 15:24
Askalite
  Пользователь

Askalite 
Сейчас: Offline
Freddy, Integer
- 21.10.2015 / 15:30
Dimon638
  Пользователь

Dimon638 
Сейчас: Offline
Askalite, Integer'ы через equals надо сравнивать.

Изменено Dimon638 (21.10 / 15:30) (всего 1 раз)
- 21.10.2015 / 16:26
Freddy
  Пользователь

Freddy 
Сейчас: Offline
- 21.10.2015 / 16:37
Oak
  Пользователь

Oak 
Сейчас: Offline
Askalite, если коротко, то числа от -128 до 127 — закешированы и поэтому обладают одинаковыми ссылками. Именно поэтому при их сравнении через == все выходит верно. Но остальные числа хоть и обладают теми же значениями, объекты, их представляющие, имеют разные ссылки.

Правильно сравнивать два Integer необходимо через equals (либо анбокснув оба числа в примитивы).
__________________
 Эль Презеденте
- 22.10.2015 / 14:09
Kalter
  Пользователь

Kalter 
Сейчас: Offline
Помню был сборник таких задачек на хабре и там об этом говорилось. Я даже в избранное добавил.

Цитата Oak:
если коротко
А если подробнее?
__________________
 Homo homini penis est.
- 22.10.2015 / 14:36
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
В JVM есть ключ для указания размера Integer cache.
-Djava.lang.Integer.IntegerCache.high=2048
__________________
 let live
- 22.10.2015 / 17:00
Oak
  Пользователь

Oak 
Сейчас: Offline
aNNiMON, поправлю, это системное свойство, а не ключ JVM.

Да, этот ключ увеличит верхнюю границу кешируемых значений — от -127 до high (такая информация справедлива как минимум для Hotspot VM).

Но на это сильно полагаться нельзя. Ссылка на документацию, цитата: This method will always cache values in the range -128 to 127, inclusive, and may cache other values outside of this range.Что значит "Значения от -128 до 127 всегда закешированы, иногда могут кешироваться и другие значения".
__________________
 Эль Презеденте

Изменено Oak (22.10 / 17:02) (всего 1 раз)
Наверх  Всего сообщений: 16875
Фильтровать сообщения
Поиск по теме
Файлы топика (794)