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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 乔九 中级黑马   /  2013-2-22 14:41  /  1204 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

package com.itheima;
import java.util.*;
public class Demo {
        public static void main(String[] args)
        {
                ArrayList al=new ArrayList();
                al.add("java01");
                al.add("java02");
                al.add("java03");
                al.add("java04");
                Iterator it=al.iterator();
                while(it.hasNext())
                {
                        Object obj=it.next();
                        if(obj.equals("java02"))
                           it.remove();
                         System.out.println("al="+obj);//为何这里的java02还能被打印?????????????
                }
                System.out.println(al);到这里被删掉了?????
               

4 个回复

倒序浏览
System.out.println("al="+obj);//为何这里的java02还能被打印?????????????
答:这里是从由于上面的it.remove()是从集合中移除了,但是在内存中obj还是指向java02,而我们打印的是Obj所以能看到obj=java02
而下面的集合中就里说当然的没有java02了
回复 使用道具 举报
  1. while (it.hasNext()) {
  2.                         Object obj = it.next();//得到元素并赋给obj引用
  3.                         if (obj.equals("java02"))
  4.                                 it.remove();
  5.                         System.out.println("al=" + obj);//这里你打的不是集合了,是已经给赋值的obj引用
  6.                         System.out.println(al);//把这句放到循环里可以看的更明白
  7.                 }
复制代码
回复 使用道具 举报

  1. //package com.itheima;
  2. import java.util.*;
  3. public class text {
  4.         public static void main(String[] args)
  5.         {
  6.                 ArrayList al=new ArrayList();
  7.                 al.add("java01");
  8.                 al.add("java02");
  9.                 al.add("java03");
  10.                 al.add("java04");
  11.                 Iterator it=al.iterator();
  12.                 while(it.hasNext())
  13.                 {
  14.                         Object obj=it.next();  //取出集合a1中的元素赋给 obj
  15.                         if(obj.equals("java02"))
  16.                            it.remove();                        //移除集合a1中等于java02的元素
  17.                          System.out.println("al="+obj);//  这里打印的是obj自然是打印所有的元素了
  18.                 }
  19.                 System.out.println(al);//这里打印集合a1,所有没有java02
  20.                 }
  21. }
复制代码
回复 使用道具 举报
al.add("java01");
al.add("java02");
al.add("java03");
al.add("java04");//这些是在给集合添加元素

迭代中Object obj=it.next();  是在把这些元素给obj对象引用
System.out.println("al="+obj);//这条语句不在判断中,它的意思是打印obj对象

JVM运行时是赋给obj一个打印一个  其实当执行if(obj.equals("java02")){it.remove();}时已经删除了java02;
但已经赋给了obj,然后你打印obj当然就有java02了

你可以把System.out.println("al="+obj);改成System.out.println("al="+al);就会明白了

最后一句打印的就是结果了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马