A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄昆 中级黑马   /  2012-6-14 19:11  /  1637 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 hkylp 于 2012-7-1 09:09 编辑

class list
{
        public static void main(String[] args)
        {
         ArrayList al=new ArrayList();
         al.add("java01");
         al.add("java02");
         al.add("java03");
         System.out.println(al);
         Iterator it=al.iterator();
         while(it.hasNext())
         {
                Object obj=it.next();
                 if(obj.equais("java02"))
                         it.remove();
                 System.out.println("obj="+obj);
         }
           System.out.println(al);
        }
}
为什么obj的打印结果是:java01 java02 java03呀?java02的引用从集合中删除和java02元素从集合中删除有什么区别呀?关于引用我特迷糊,希望兄弟们帮我好好分析一下。

评分

参与人数 1技术分 +1 收起 理由
赵志勇 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
本帖最后由 李盼 于 2012-6-14 19:23 编辑

class Test
{
        public static void main(String[] args)
        {
         ArrayList al=new ArrayList();
         al.add("java01");
         al.add("java02");
         al.add("java03");
         System.out.println(al);
         Iterator it=al.iterator();
         while(it.hasNext())
         {
                Object obj=it.next();
                 if(obj.equals("java02"))
                         it.remove();
                 System.out.println("obj="+obj);
         }
           System.out.println(al);
        }
}
最后打印的结果是
[java01, java02, java03]
obj=java01
obj=java02
obj=java03
[java01, java03]

java02确实被移除了!另说明楼主的equals书写有误。还有集合中存放的都是对象的引用,不会存放对象本身,所以删除的也是对象的引用,不存在删除对象本身!

评分

参与人数 1技术分 +1 收起 理由
赵志勇 + 1

查看全部评分

回复 使用道具 举报
其实这个你应该重写下equals方法,如果你没有重写equals方法,它的作用是与“==”一样,比较的是对象引用地址是否相等。
而你加入的每一个字符串的是不同的对象,当然引用地址不同哦!
你可以重写equals
public boolean equals(String str)
{
return this.compareTo(str);
}

评分

参与人数 1技术分 +1 收起 理由
赵志勇 + 1 赞一个!

查看全部评分

回复 使用道具 举报
所谓引用,其实就是某一个变量的一个别名,所以数组是没有引用的。。当初我们的C语言老师好像讲过。譬如:int i; int &a=i; 定义了引用a,即变量i 的别名!
回复 使用道具 举报
集合中就没有元素的实例对象,存的都是这些对象的引用,而引用说白了就是这些对象在内存中的地址而已。
         Object obj=it.next();   //这个时候把"java02"赋给obj 了;
                 if(obj.equais("java02"))
                         it.remove();   //这只是把存放在集合中的"java02"的地址移除了而已,但内存中还是存在"java02"这个对象的
                 System.out.println("obj="+obj);//obj引用的对象是"java02",当然就能打印出来了。

评分

参与人数 1技术分 +1 收起 理由
赵志勇 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马