是指在调用函数时将实际参数复制一份传递到函数中, 这样在函数中如果对参数进行修改,将不会影响到实际参数。 是指在调用函数时将实际参数的地址直接传递到函数中, 那么在函数中对参数所进行的修改,将影响到实际参数。 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中其实还是值传递的,只不过对于对象参数,值的内容是对象的引用。
|