当前位置: 首页 > 图灵资讯 > java面试题> 金三银四精选java面试题-Java 中的参数传递时传值呢?还是传引用?

金三银四精选java面试题-Java 中的参数传递时传值呢?还是传引用?

来源:图灵教育
时间:2023-11-28 10:21:20
 

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的。