1. 值传递,示例代码如下:
public class A {
public void method(int arg) {
arg = 10;
System.out.println(arg);
}
public static void main(String[] args) {
int var = 5;
A a = new A();
a.method(var); //var是基本数据类型,传递var的字面值的拷贝
System.out.println(var);
}
}
输出结果如下:
10
5
输出结果表明,方法method(int arg)的代码并没有改变变量var的值,属于值传递,就是改变形参的值对实参没有影响,就酱紫。
2. 引用传递,示例代码如下:
public class User {
public String username = "";
public User(String username) {
this.username = username;
}
@Override
public String toString() {
return username;
}
}
public class B {
public void method(User user) {
user.username = "李四";
System.out.println(user);
}
public static void main(String[] args) {
B b = new B();
User san = new User("张三");
b.method(san); //u是引用类型变量,传递的是实参引用的拷贝,属于引用传递
System.out.println(san);
}
}
输出结果如下:
李四
李四
输出结果表明,方法method(User u)代码能够修改san的内容,属于引用传递,即修改形参指向对象的属性能够影响到实参指向对象的属性。
注意:发生引用传递时,修改形参的引用时(不是修改形参指向对象的属性),不会影响实参的引用!!! 很抽象吗?猛点这里做个题目。