当前位置:编程学习 > JAVA >>

新人求助, 一个java的基础问题

public class StaticTest {
private  void setUser(List<User> a){
a.add(new User(-1,"root"));
for(User u:a){
 
 u.setId(0); //this.id=0
}
 
}

private void setInt(int a){
a=5;
}

private void setAl(List<Integer> al){
for(int a:al){
a=6;
}
}

 
public void getA(){
List<User> a=new ArrayList<User>();
 a.add(new User(1,"l"));
 a.add(new User(2,"w"));
 setUser(a);
 
 int i=3;
 List<Integer> al=Arrays.asList(1,2,3);
 
 
 
 setAl(al);
 setInt(i);

 
 System.out.println(a);
System.out.println(i);
System.out.println(al);
}


public static void main(String[] args) {
StaticTest st=new StaticTest();
st.getA();
}

}



就是如上的代码

我很奇怪的就是为什么
 setUser(a);
 setAl(al);
setInt(i);
这三个方法, 其中setUser里面的循环将参数的值给更改了,
就是for(User u:a){
 
 u.setId(0);  }
这里, 通过u的setid方法, a (User)这个参数的内容被更改了。

但是其余的int和arraylist<Integer>就没有任何改动。

--------------------编程问答-------------------- 引用啊引用,u引用了list中的一个个对象 --------------------编程问答-------------------- 面对这种题,脑子里要生成一个 对象引用图  --------------------编程问答--------------------  setUser(a);  //这里的参数是一个引用对象, 对应的内存地址指向arraylist里面包含的对象
在这里  for(User u:a){
               u.setId(0);} 
的实质是修改了引用对象的内存里的内容。
相当于 for(int i=0;i<a.size;i++)
{     User u=a.get(i);
u.setId(1);

  // 这个u.setId实质上修改了引用对象的内容
}

--------------------编程问答--------------------  private void setInt(int a){
        a=5;
    }

这里传进去的只是一个常量, 实质上没有指向任何地址。

这里无论如何修改a的值, 最后外面作用域的那个数值是不会改变的 --------------------编程问答-------------------- --------------------编程问答-------------------- ref 传递的话  才会改变实参。
补充:Java ,  Java SE
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,