永发信息网

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

答案:2  悬赏:50  手机版
解决时间 2021-01-19 18:53
关于 Iterator 的 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)) {
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
古往今来的廉洁人物介绍
包门套多少钱一米?
现在最好用的摩托车是哪辆
求大学团支书竞选演讲稿
do the what you park did in 连词成句
朋友们的微信渠道从哪里来?
The detective, to be reading a newspaper,
东坡改诗阅读短文苏东坡改诗他改得对吗?如果
现在怀着二胎,老公还是漠不关心,我该怎么办
天籁贴膜需要花费多少钱
奥林游泳馆地址在哪,我要去那里办事,
辽宁省朝阳市建平县三家乡人口
虽与之俱学 弗若之矣的 弗 是什么意思
贵州创先特种人员培训基地,有这个地方吗?求
距离测量按什么键即可得到测量距离
推荐资讯
京东宣布物流盈利,你对京东的快递怎么评价?
高速公路限速八十我开了120这个怎么算
艺考第一就是好演员吗
丙加偏旁组成新字组词
如何测量油漆涂层厚度
打算618买个吸尘器,谁给推荐一个?
移动宽带能装到农村吗?
多选题下列现象中物体处于超重状态的是A.汽车
lol 78个英雄 7个皮肤 值多少
如何应用《孙子兵法》追求有男朋友的女孩?
乾酒有什么功效?
(2014?济南模拟)将蛙脑破坏,保留脊髓,做
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?