public class Main {
public static void main(String[] args) {
String name = "muhuo";
int age = 26;
setName(name);
setAge(age);
System.out.println(name + " " + age);
}
private static void setName(String name) {
name = "other name";
}
private static void setAge(int age) {
age = 18;
}
}
输出为:muhuo 26
以上证实基本无论是基本数据类型或者引用数据类型都是值传递,调用setName、setAge的参数都是参数的拷贝不影响其原始值
public class Main {
private String name;
private int age;
public static void main(String[] args) {
Main main = new Main("muhuo", 20);
System.out.println(main);
}
private static void mod(Main main) {
main.name = "other name";
main.age = 18;
}
public Main(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
final StringBuffer sb = new StringBuffer("Main{");
sb.append("name='").append(name).append('\'');
sb.append(", age=").append(age);
sb.append('}');
return sb.toString();
}
}
输出为:Main{name='muhuo', age=20}
所以对于对象来说,这里调用mod方法的参数是拷贝了mian对象的引用,但是这里引用所指向的真实地址是没变的,所以mod方法内部确实对原始对象中的值进行了改变。