qq7002433671 2016-05-17 02:41 采纳率: 100%
浏览 2238
已采纳

关于增强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集合里的值也跟着修改了?

  • 写回答

4条回答 默认 最新

  • havedream_one 2016-05-17 03:07
    关注

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

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

    其实就是值传递和引用传递的区别
    
    基本类型是值传递,而对象,数组传递是引用传递
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?