Java:对象作为参数传递时,不需要进行返回

郎家岭伯爵 2023年08月31日 394次浏览

前言

如果一个方法的参数为对象,需不需要把它返回给调用方呢?

实现

理论

在 Java 中,对象作为参数传递时,实际上是传递了对象的引用。这意味着,在 handleList 方法中,传递给它的是 list 对象的引用,而不是对象的副本。因此,当在 handleList 方法内部修改 list 中的元素时,实际上是在原始的 list 对象上进行的修改,而不是创建了一个新的 list。

由于 handleList 方法修改的是传递给它的对象的状态,而不是返回一个新的对象,所以不需要在 handleList 方法中返回任何值。修改会直接反映在原始的 list 对象上。

效果

我们来看下如下代码块:

@GetMapping("/t51")
public void test51(){
    List<UserEntity> list = new ArrayList<>();

    UserEntity userEntity = new UserEntity().setAge(25);
    UserEntity userEntity1 = new UserEntity().setAge(25);
    UserEntity userEntity2 = new UserEntity().setAge(25);

    list.add(userEntity);
    list.add(userEntity1);
    list.add(userEntity2);

    System.out.println("handleList方法调用前:" + list);

    handleList(list);

    System.out.println("handleList方法调用后:" + list);
}

/**
 * 把List中的User的age改为30
 * @param list list
 */
private void handleList(List<UserEntity> list) {
    for (UserEntity item : list) {
        item.setAge(30);
    }
}

使用 POSTMAN 调用接口,输出如下:

handleList方法调用前:[UserEntity(id=null, userName=null, password=null, age=25), UserEntity(id=null, userName=null, password=null, age=25), UserEntity(id=null, userName=null, password=null, age=25)]
handleList方法调用后:[UserEntity(id=null, userName=null, password=null, age=30), UserEntity(id=null, userName=null, password=null, age=30), UserEntity(id=null, userName=null, password=null, age=30)]

这里我们从输出可以看出,handleList() 方法没有返回的情况下,在调用方法前后 list 中的元素值发生了变化。

整数型List示例

实体对象示例

总结

Java 中对象作为参数传递时,实际上是传递了对象的引用。这意味着,在 handleList 方法中,传递给它的是 list 对象的引用,而不是对象的副本