前言
如果一个方法的参数为对象,需不需要把它返回给调用方呢?
实现
理论
在 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 中的元素值发生了变化。
总结
Java 中对象作为参数传递时,实际上是传递了对象的引用。这意味着,在 handleList 方法中,传递给它的是 list 对象的引用,而不是对象的副本。