关于Java中Integer的“坑”

今天做毕业设计项目的时候,遇到了Integer拆箱装箱的问题

将问题抽象为,使用两个Integer数组,Integer list1[], list2[]

在判断其中是否有相同元素时,遇到的一个问题

for(Integer a : list1) {
    for(Integer b : list2) {
        if(a == b) {   // 当a与b均为142时,居然进不去这个判断条件!!!
            System.out.println("相等");
        }
    }
}

百度了才知道,这归结于Java对于Integer与int的自动装箱与拆箱的设计,是一种设计模式,叫做享元模式。

加大对简单数字的重利用,Java定义在自动装箱时,对于值从-128~127之间的值,他们被封装为Integer对象后,会在内存中被重用,始终只存在一个对象。

而如果是-128~127区间之外的值,被封装后的Integer对象不会被重用(即相当于每次装箱时都创建一个新的Integer对象)

原文地址:https://www.cnblogs.com/mjn1/p/14551986.html