public class Document{
private Integer status;
// get()/set()
}
然后是一个枚举:
public enum DocumentStatusEnum {
ACTIVE_DOCUMENT(2060),CANCELLED_DOCUMENT(2061),DRAFT_DOCUMENT(2062),PROCESSED_DOCUMENT(2063);
private final Integer value;
private DocumentStatusEnum(Integer value){
this.value = value;
}
public Integer getValue(){
return value;
}
}
在一种方法中,我使用了上述方法,如下所示:
Document d = new Document();
d.setStatus(2063);
if (d.getStatus() == DocumentStatusEnum.PROCESSED_DOCUMENT.getValue()){
{
// print true;
}
else{
// print false;
}
我在这里得到真实的。看起来不错。以同样的方法,几行之后,我这样做:
d.setStatus(2060)
if (d.getStatus() == DocumentStatusEnum.ACTIVE_DOCUMENT.getValue()){
// print true
}
else{
// print false
}
我得到一个假的。我研究并发现了一些关于 Java 中的缓存和装箱功能。我将枚举定义转换为:
public enum DocumentStatusEnum {
ACTIVE_DOCUMENT(2060),CANCELLED_DOCUMENT(2061),DRAFT_DOCUMENT(2062),PROCESSED_DOCUMENT(2063);
private final int value;
private DocumentStatusEnum(int value){
this.value = value;
}
public int getValue(){
return value;
}
}
现在,没有问题。我在这两种情况下都是正确的。
问题是为什么会这样?我觉得这种行为非常不稳定。这是我正在处理的一个大型应用程序,并且我到处Integer == Integer
都在使用比较。我在这里安全吗?