值传递与引用传递一张图就能理解

  不可变类是指当创建了这个类的实例后,就不允许修改它的值的类,也就是一个对象一旦被创建出来,在其整个生命周期中,它的成员变量就不能被修改了,只允许其他程序进行读操作,而不允许其他程序进行修改操作。

  在java类库中,所有基本类型的包装类都是不可变类,如Integer、Float等。此外,String也是不可变类。

  在java中,除了8种原始数据类型外,其他的类型都是对象,在方法调用的时候,传递的都是引用。从本质上讲,引用也是按值传递,只不过传递的这个值是对象的引用而已,因此,在方法调用的时候,对形参引用所指对象属性值的修改对实参可见。但是,对引用值本身的修改对实参是不可见的。

举个简单引用传递的例子:

public class Person {

private int age;
private String name;
public Person(int age, String name) {
this.age = age;
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public static void main(String args[]) {
int n = 0;
Person person = new Person(28, "zhansan");
System.out.println("person1:" + person);
person.Uname(person);
person.Pname(person);
person.cname(n);
System.out.println("main:"+n);
}
public void Uname(Person person) {
person.age = 8;
person.name = "L";
System.out.println("person2:" + person);
}
public void Pname(Person person) {
person.age = 7;
System.out.println("person3:" + person);
}
public void cname(int n) {
n= n+2;
System.out.println("cname:"+n);
}
}

输出结果:

由输出结果可以看出,对象的地址为同一个,所以指向的是同一个对象;

而值传递,改变的只是形参副本。

猜你喜欢

转载自www.cnblogs.com/windy-xmwh/p/9205724.html