是值传递。Java语言的方法调用只支持参数的值传递。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的属性可以在被调用过程中被改变,但对对象引用的改变是不会影响到调用者的。C++和C#中可以通过传引用或传输出参数来改变传入的参数的值。在C#中可以编写如下所示的代码,但是在Java中却做不到。
public class Person {
private int id;
Person(int id){
this.id = id;
}
public void setId(int id){
this.id = id;
}
public int getId(){
return this.id;
}
public static void change(Person person){
person.setId(7);
}
public static void main(String[] args) {
Person cleverCode = new Person(5);
System.out.println(cleverCode.getId());
change(cleverCode);
System.out.println(cleverCode.getId());
}
}
5
7

过程:
1、cleverCode指向了堆区new Person()引用,引用地址为的0X00000S13。
2、change方法,参数传递的时候,person拷贝了cleverCode指向的堆引用地址。
3、当调用change方法的时候,里面setId(7)。实际上是调用了new Person().setId(7)。
本文详细解释了Java中的值传递机制,通过一个具体的Person类实例演示了如何改变对象属性但不改变对象引用的过程。
1527

被折叠的 条评论
为什么被折叠?



