Java Integer比较中的那些坑
来源:互联网 发布:大数据导论 pdf 编辑:程序博客网 时间:2024/06/06 12:58
前几天同事偶然遇到的一个问题,在list中查询出重复的值,留下第一个,其余删除。
ArrayList<Integer> a//a中装有要操作的数据,都是数字for(int i;i<a.size();i++){ //....遍历 for(int j=i;j<a.size();j++){ if(a.get(i)==a.get(j)){ a.remove(j); } }}
然后喜闻乐见的程序出问题了:程序无法将相同的值除第一个外删除掉。说起来这也是一个比较基础性的问题。
int为基本类型,Integer类型为基本包装类型。因而可以将Integer当做一个对象来理解,所以在上面的代码示例中,用==来比较2个对象的引用无疑就是在搞笑了,地址都不一样,怎么可能返回true。
但是这里存在着一些坑,就是Integer有时候用==比较是可以得到true的(值相同),原因如下:
在-128至127之间的赋值,Integer对象是在IntegerCache.cache产生,会复用已有对象,这个区间内的Integer值可以直接使用==进行判断,但是这个区间之外的所有数据,都会在堆上产生,并不会复用已有对象。
所以推荐都使用equals比较。
这里还牵涉到了一点,就是这里为什么不直接用int类型呢?这是因为ArrayList中只接受Object对象,实际情况如下:
ArrayList al=new ArrayList();int n=40;Integer nI=new Integer(n);al.add(n);//不可以al.add(nI);//可以
0 0
- Java Integer比较中的那些坑
- java中的Integer和int比较
- Integer 类型数据比较相等的那些坑
- java Integer 比较
- JAVA Integer 比较问题
- Java Integer 比较
- Java中的Integer、Long等实例的比较
- java中int和integer比较,integer和integer比较
- java基础Integer与Integer比较
- Java表达式中的那些坑
- java Integer比较的妙用
- Java包装类Integer比较
- java中Integer的比较
- java Integer == 比较
- java Integer的值比较
- java Integer类型值比较
- JAVA Integer值比较问题
- Java之Integer数值比较
- MongoDB 3.0 用户验证问题
- 优化myshool 第六章上机练习
- iOS开发技巧之:截取字符串中两个指定字符串中间的字符串
- 回调函数原理与使用案例
- 虚拟机使用ubuntu运行VS code出现界面黑屏时的解决办法
- Java Integer比较中的那些坑
- 模糊查询LIKE语句的SQL注入预防
- Hibernate_映射文件详解
- 用JS获取地址栏参数的方法
- Http协议与TCP协议易混淆点(一)
- HDU 5423 Rikka with Tree
- Oracle12C Database Vault配置及使用(一)
- 日志分割logrotate
- dedecms织梦模板中currentstyle标签失效不能使用