关于foreach和for的一点思考

问题由来:
想用foreach遍历,而后修改数组里面的元素,代码例子以下:
(主要是以为数组的话是引用 这么改应该有效吧)web

String[] ids = {"1","2"};
for (String id : ids){
    id = "xx" + id;
}

而后发现遍历之后仍是输出1,2。数组

那么不由会产生疑问?难道这个id只是new出来的,和ids里面的没有关系?具体的就不知道了,反正发现了这么一个现象。svg

若是想修改的话,我的以为就只能用for循环了。spa

引伸:
而后去网上搜,说是foreach遍历的时候list不能添加和删除(可是没说不能修改)。
就试了一下,code

List xli = new ArrayList();
xli.add("0");
xli.add("1");
xli.add("2");
for (Object object : xli) {
    System.out.println(object);
    xli.add("4");  //报错 报错原理也仍是不知道,确定是有内在的逻辑的。
    xli.remove(0); //报错
    xli.set(0, "10"); //能够修改为功
}