今天做毕业设计项目的时候,遇到了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对象)