黑马程序员技术交流社区

标题: 运行结果怎么没出现"并发修改异常"啊? [打印本页]

作者: Demo_黑马    时间: 2016-5-24 22:11
标题: 运行结果怎么没出现"并发修改异常"啊?

复制代码
运行结果:[李跛子, 王二麻子, 张拐子]
为神马没出现所谓的"并发修改异常"啊?而且结果怎么也没变?好心碎...本来没学好,然后敲了一段自己都看不懂的代码,头都大了.求大大神指点哦~~~!

作者: Demo_黑马    时间: 2016-5-24 22:13
代码在此,不好意思啊,出了点意外:
public class Demo{       
        public static void main(String[] args) {
                Student[] stus = new Student[3];
                stus[0] = new Student("李跛子");
                stus[1] = new Student("王二麻子");
                stus[2] = new Student("张拐子");
                delete(stus);
                System.out.println(Arrays.toString(stus));
        }
        private static void delete(Student[] stus) {
                for (Student student : stus) {
                        if ("张拐子".equals(student.name)) {
                                student = null;
                                break;
                        }
                }
        }
}
class Student {
        public String name;
        public Student(String name) {
                this.name = name;
        }
        public String toString() {
                return name;
        }
}
作者: HeiMaZ    时间: 2016-5-24 22:44
for (Student student : stus)中 student = null的问题,改为stus=null
作者: Demo_黑马    时间: 2016-5-24 22:59
HeiMaZ 发表于 2016-5-24 22:44
for (Student student : stus)中 student = null的问题,改为stus=null

改了,结果也没变额...
作者: Demo_黑马    时间: 2016-5-24 23:00
HeiMaZ 发表于 2016-5-24 22:44
for (Student student : stus)中 student = null的问题,改为stus=null

改了,结果也没变额...
作者: 即墨    时间: 2016-5-24 23:01
你把break去掉试试,他检测是在next上
作者: 逝水大魔王    时间: 2016-5-24 23:25
集合里的都是地址值,你的那个对象是new的,应该是堆里面的,你是在堆里面赋值为null了,而常量池里面的地址值没改变
作者: hero_king    时间: 2016-5-24 23:38
增强for底层是迭代器,当方法检测到对象的并发修改,但不允许这种修改时抛出并发修改异常,直接将new出来的对象赋值为空只是在堆内存中赋值为空了,集合元素中并没有改变,集合中是对象在堆内存中的地址值。比如你使用add或者delete方法修改集合元素就会报ConcurrModificatExcepti
作者: 小雨皮    时间: 2016-6-28 15:34
你这个问题和并发异常没有关系,student=null;这个对象地址变成null,就跟原来的数组没有关系了,所以改变不了,如果你试试student.name=null,就能改变。
作者: 云袭    时间: 2016-6-28 19:08
并发修改是在遍历的时候改变集合元素个数才会出现。改值不影响




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