从结果中可以看出,在函数体中stu1和stu2所指向的对象确实是发生了改变,这是因为在值传递的过程中拷贝了他们在堆中的地址。
来看看他们在内存中是怎么样的:
这时候你可能会问,既然java的值传递是拷贝地址,那我能不能改变地址所指向的内容?答案是:当然可以
public static void changeInf(Student stu) {
stu.setName("我改名字了");
}
public static void main(String[] args) {
Student stu=new Student("张三",18);
changeInf(stu);
System.out.println(stu);
}
结果:
Student [name=我改名字了, age=18]
对象内容改变了
结论:java中只有值传递,这可能是因为java没有指针和别名引用的原因吧。