自定义的类:
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的,但肯定是参数传递这儿的问题,