A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  • 值传递(pass by value)
是指在调用函数时将实际参数复制一份传递到函数中,
这样在函数中如果对参数进行修改,将不会影响到实际参数。
  • 引用传递(pass by reference)
是指在调用函数时将实际参数的地址直接传递到函数中,
那么在函数中对参数所进行的修改,将影响到实际参数。
public static void main(String[] args) {
    int i = 10;
    pass(i );
    System.out.println("i =" + i);
}
public static void pass(int j) {
    j = 20;
    System.out.println("j = " + j);
}
上面的代码中,我们在pass方法中修改了参数j的值,
然后分别在pass方法和main方法中打印参数的值。
pass方法内部对name的值的修改并没有改变实际参数i的值。
那么,按照上面的定义,有人得到结论:Java的方法传递是值传递。
public static void main(String[] args) {
    User user = new User();
    user.setName("facker");
    user.setGender("Male");
    pass(user);
    System.out.println("user =" + user);
}
public static void pass(User user) {
    user.setName("uzi");
    System.out.println("user =" + user);
}
经过pass方法执行后,实参的值竟然被改变了,
那按照上面的引用传递的定义,实际参数的值被改变了,这不就是引用传递了么。
于是,根据上面的两段代码,
有人得出一个新的结论:Java的方法中,在传递普通类型的时候是值传递,在传递对象类型的时候是引用传递。
public static void main(String[] args) {
    String name = "facker";
    pass(name);
    System.out.println("name = " + name);        //facker
}
public void pass(String name) {
    name = "uzi";
    System.out.println("name =" + name);        //uzi
}
同样传递了一个对象,但是原始参数的值并没有被修改,难道传递对象又变成值传递了?
上面的参数其实是值传递,把实参对象引用的地址当做值传递给了形式参数。
所以说,Java中其实还是值传递的,只不过对于对象参数,值的内容是对象的引用。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马