1、一定是值传递,给你的表象也有引用传递是因为对象传递的引用地址,我们在堆里更改了对象的属性值,但是地址没有变更,所以是值传递,可以参考方法的堆栈。
2、本质点看是否new一个新对象,如果new新对象,则原来值不会改变
package com.vip.vman.test;
/**
* @author wpp
* @Date 2024/7/3 09:50
*/
public class Test2 {
public static void main(String[] args) {
int i =1;
sum(i);
System.out.println(i);
User user =new User();
user.setName("user1");
//传进去的值是实参
updateUser(user);
System.out.println(user.name);
}
private static void sum(int i){
i = 10;
}
//todo 方法里的参数一定是形参
private static void updateUser(User user){
//todo user代表是局部变量,通过new对象把新地址给到局部变量,下面操作就是对局部变量进行更新。不会更改原值,
user = new User();
//todo 把 user = new User();注释掉,会变更原值
user.setName("user2");
}
}
class User {
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}