中易网

关于 Iterator 的 remove 方法(太奇怪了,搞不懂)

答案:3  悬赏:0  
解决时间 2021-02-18 05:08
Collection c = new ArrayList();
int x = 128;
c.add("hello");
c.add((Integer)x);
System.out.println(c);
for (Iterator ii = c.iterator(); ii.hasNext();) {
if (ii.next()== (Integer)x) {
ii.remove();
}
}
System.out.println(c);

当 c.add((Integer)x) 或者我写成 c.add(x) ,只有 -128〈= x 〈= 127 的时候,才能remove掉。

其他值,程序没有remove掉。

我想知道为什么。

我看API :

保持 int 类型的最大值的常量可取的值为 2的31次方-1。
保持 int 类型的最小值的常量可取的值为 -2的31次方

望高手解答! 万分感谢
您误解我的意思了
就我写的程序
为什么小于-128或者大于128的数 就remove 不掉呢 ?
最佳答案
在JAVA类库的源码java/lang/Integer.java类中有这么一个内部类
private static class IntegerCache {
private IntegerCache(){}

static final Integer cache[] = new Integer[-(-128) + 127 + 1];

static {
for(int i = 0; i < cache.length; i++)
cache[i] = new Integer(i - 128);
}
}

public static Integer valueOf(int i) {
final int offset = 128;
if (i >= -128 && i <= 127) { // must cache
return IntegerCache.cache[i + offset];
}
return new Integer(i);
}
这段代码,因为你用的是5.0中的自动装箱特性.从理论上来说是Integer是一个类而int是基本数据类型.一个是对象而一个是数据类型两者是不能强制类型转换的,之所以你能用(Integer)x将int类型的变量x强制类型转换成Integer,创建出一个Integer类型的对象,是因为JAVA在5.0中当类Integer.class加载的时候就帮你自动在池中创建了-128到127之间的Integer对象.当你进行强制类型转换的时候并不是将创建出一个Integer对象出来而是去池中拿出一个-128到127之间的Integer对象来给你用。所以你知道为什么不能remove掉那个元素,因为池中没有所以虚拟机从池中拿不出来所以你强制类型转换以后就什么都没有了.
如果你要程序能remove掉X元素你可以这样写:
List c = new ArrayList();
int x = 128;
c.add("hello");
c.add(new Integer(x));
System.out.println(c);
for (Iterator ii = c.iterator(); ii.hasNext();) {
if (ii.next().equals(new Integer(x))) {
ii.remove();
}
}
System.out.println(c.toString);
全部回答
对象比较是否相等时,不能直接用 "==" 操作符来完成,要调用对象的 equals(); 方法,"==" 一般用在基本数据类型的相等性判断. 所以把你的代码改一下: if (ii.next()== (Integer)x) { 改成: if (ii.next().equals((Integer)x)) {
你好! 对象比较是否相等时,不能直接用 "==" 操作符来完成,要调用对象的 equals(); 方法,"==" 一般用在基本数据类型的相等性判断. 所以把你的代码改一下: if (ii.next()== (Integer)x) { 改成: if (ii.next().equals((Integer)x)) { 打字不易,采纳哦!
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
2015年孙娜恩现在还带着那个手链吗
金泽商务宾馆地址在什么地方,想过去办事
结婚前和男友吵架冷战怎么办
多米诺骨牌制作
禹馨小吃怎么去啊,有知道地址的么
捷貂×f和宝马525那个动力好
耐克sb怎么辨别真假?麻烦帮助辨别一下,谢谢
哈尔滨到德州火车票价
稀金多少钱一克
老骨汤烧鸭面馆地址在什么地方,想过去办事
_____ all the inventions have in common is
善粮人家手工水饺先农坛路店怎么去啊,有知道
我们曾在知识的海洋中奋力拼搏是比喻句吗?
纯剪美业地址在哪,我要去那里办事
重庆610公交车早上好多时间开始运营
推荐资讯
韩剧 玩偶骑士和追梦高中有关系吗
光明洗浴在哪里啊,我有事要去这个地方
小草和大树三个人物的介绍
#define pi 3.1415926 #include<stdio.h> voi
现货白银有什么优势?
我今年高考分544,会被云南农业大学烟草专业
戴珠子说消磁是什么意思
背景墙边框选的是十五公分的相框,可以直接粘
好之味火锅地址在什么地方,想过去办事
求推荐校园题材的修真小说 不是异能
信用卡是不是什么银行都可以申请????
上华街道小张坑村第一村卫生室地址在哪,我要
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?