黑马程序员技术交流社区

标题: 黑马新手不得不解决的问题 [打印本页]

作者: 金肖    时间: 2012-5-2 11:20
标题: 黑马新手不得不解决的问题
import java.util.ArrayList;
import java.util.ListIterator;
public class ListDemo {
        public static void main(String[] args) {
                ArrayList<String> al = new ArrayList<String>();
                al.add("abc01");
                al.add("abc02");
                al.add("abc03");
                al.add("abc04");
                //在迭代过程中天加元素
                ListIterator<String> li = al.listIterator();
                while(li.hasNext())
                {
                        String s = li.next();
                        if(s.equals("abc02"));
                        {
                                li.add("java");  //此处不是判断s是否和“acb02”的地址相同,如果相同就在“abc02”后面添加“java”
                        }
                }
                System.out.println(al);
        }
}
//可是打印即如果为什么是:[abc01, java, abc02, java, abc03, java, abc04, java]
//而不是:[abc01, abc02,java, abc03, abc04]它呢?

作者: 杨志    时间: 2012-5-2 11:38
这个这个……我表示很悲剧!
这这里的原因就是因为:
  1. if(s.equals("abc02"));
复制代码
这一句代码中的后面的一个分号导致的!
这一个分号代表这句语言执行结束,那么就就说这个判断也就结束了。
那么后面的逻辑就不存在了。这就导致了,不管是不是一样,也会去增加。
还有就是equals比较的不是地址哦!这里比较的就是表面的值呢!
要比较地址则要:
  1. if(s == abc02"){
  2.     li.add("java");      
  3.                  }
复制代码
谢谢!
作者: 贾联国    时间: 2012-5-2 11:42
本帖最后由 贾联国 于 2012-5-2 11:51 编辑

add(E e)方法是将指定的元素添加到此列表的尾部,程序会执行无论if是否符合条件,执行一次add
作者: 金肖    时间: 2012-5-2 11:43
噢。 我也太不小心了。。。
作者: 隋营营    时间: 2012-5-2 11:52
OK,学习了,ArrayList用Iterator迭代的时候不允许修改数据,而用ListIterator迭代时可以!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2