Java 中的参数传递时传值呢?还是传引用?
在 Java 中,方法参数传递是按值传递的。这意味着在方法调用时,实际上是将参数的值进行拷贝并传递给方法内部使用,而不是直接传递参数本身的引用。
- 对于基本数据类型(如整数、浮点数等):传递的是其值的拷贝。任何对参数值的修改都不会影响原始变量。
- 对于引用类型(如对象、数组等):传递的是引用的值的拷贝,也就是说方法内部的参数和原始变量将引用同一个对象。虽然我们可以通过方法内部的参数修改对象的状态,但是对于引用本身的修改是不会影响原始变量的。
@Test
public void passValueDemo() {
int baiLiValue = 5;
modifyValue(baiLiValue);
System.out.println("modifyValue after:" + baiLiValue);
System.out.println("-----------------------------");
User user = new User(1,"baili","baili.com");
modifyUser(user);
System.out.println("modifyUser after:" + user);
}
public void modifyValue(int number) {
number = 10;
System.out.println("modifyValue:" + number);
}
public void modifyUser(User user) {
// user = new User(); //直接修改user本身,不影响原user属性
user.setUsername("BAILI");//直接修改name属性,会影响原user属性
System.out.println("modifyUser:" + user);
}
上面的案例,其中baiLiValue是基本类型,所以传递的是值的拷贝,修改后不会影响原值。
而User对象传递是引用的值的拷贝,我们可以修改其内部属性。但直接修改User本身时,是不会影响原User的。