黑马程序员技术交流社区
标题:
运行结果怎么没出现"并发修改异常"啊?
[打印本页]
作者:
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