关于增强for循环赋值问题(JAVA) 求大神回复一下小白

自定义的类:
class SS{
String a;

public SS(String a) {
    super();
    this.a = a;
}

public String getA() {
    return a;
}

public void setA(String a) {
    this.a = a;
}
@Override
public String toString() {
    // TODO Auto-generated method stub
    return a;
}

}
public class extroFor {

public static void main(String[] args) {
    List<SS> list = new ArrayList<SS>();
    list.add(new SS("hello"));
    list.add(new SS("world"));
    list.add(new SS("jj"));
    for (SS s:list){
        if(s.getA().equals("jj")){
            s.setA("ff");
            System.out.println(s);  //jj的值被修改为ff
        }
    }
int arr[] ={15,16,17,18};
    for(int b:arr){
        if(b==15){
            b=0;     //b的值没有被修改仍为15
        }
    }
    }

}

这为什么增强for循环里面不是不能修改其集合或者arr的值的吗?为什么那个自定义的类
调用的get.set方法修改的临时变量s 的值 list集合里的值也跟着修改了?

List<SS>存的是对象地址
for (SS s:list)中s访问的是对象地址,因此可以更改对象内容

for(int b:arr) 中b只相当于数组元素的一个值复制,因此对b的修改无法影响数组中的元素

其实就是值传递和引用传递的区别

基本类型是值传递,而对象,数组传递是引用传递

这种只能遍历 不能修改的

实际上s是一个新的对象 你对他做了改变 但是 原对象不会变的。
like

A a =new A();
A b =a;
b.set(...);
并不会改变a

可以改的,for(int b:arr) 这个只是获取了数组值得复制体吧,你再看看java的值传递和地址传递吧,我不是搞java的,但肯定是参数传递这儿的问题,