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

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

前言

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

实现

理论

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

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

效果

我们来看下如下代码块:

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

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

  7. list.add(userEntity);
  8. list.add(userEntity1);
  9. list.add(userEntity2);

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

  11. handleList(list);

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

  14. /**
  15. * 把List中的User的age改为30
  16. * @param list list
  17. */
  18. private void handleList(List<UserEntity> list) {
  19. for (UserEntity item : list) {
  20. item.setAge(30);
  21. }
  22. }

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

  1. 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)]
  2. 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示例

整数型List示例

实体对象示例

实体对象示例

总结

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