Возможный дубликат:
целое число класс-оболочка и оператор == — где указывается поведение?
Я знаю, что целочисленный кеш Java используется в диапазоне от -127 до 128. Если
Integer i = 1;
Integer j = 1;
Integer m = 128;
Integer n = 128;
i == j // true
m == n // false
Но я столкнулся со странным явлением. Во-первых, посмотрите на следующий фрагмент.
List<CustomerNotice> customerNotice = findByExample(example); // use Hibernate findByExample method
for(CustomerNotice n : customerNotice){
if(n.getConfirmStatus() == NoticeConfirmStatus.UNCONFIRMED.getValue()){
// do sth
}
}
public enum NoticeConfirmStatus{
UNCONFIRMED(1), //
CONFIRMED(2), //
FAILED_TO_CONFIRM(3); //
private final Integer value;
private NoticeConfirmStatus(Integer value) {
this.value = value;
}
public Integer getValue() {
return this.value;
}
}
public class CustomerNotice {
@Column(name = "CONFIRM_STATUS")
private Integer confirmStatus;
public Integer getConfirmStatus() {
return this.confirmStatus;
}
public void setConfirmStatus(Integer confirmStatus) {
this.confirmStatus = confirmStatus;
}
}
Хотя выражение if не рекомендуется, я думаю, что оно вернет true, потому что n.getConfirmStatus()==1
, но результат будет false. Я очень запутался.
Кроме того, theList<CustomerNotice> customerNotice
получен методом Hibernate findByExample. Есть ли какая-то автоупаковка или новая операция при извлечении набора результатов?
Спасибо.
java.lang.Integer.IntegerCache.high
может изменить конечный номер этого кеша на что-то другое (см. это). Не полагайтесь на целочисленный кеш вообще. - person prunge   schedule 15.12.2011-128
до127
, а не 128. - person Peter Lawrey   schedule 15.12.2011