值传递和引用传递的区别
/**
* java中值传递和引用传递
*/
class Person {
private Integer id;
private String personName;
public Person(String personName) {
this.personName = personName;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getPersonName() {
return personName;
}
public void setPersonName(String personName) {
this.personName = personName;
}
}
public class TransferValueDemo {
public void changeValue(int age) {
age = 30;
}
public void changeValue2(Person person) {
person.setPersonName("飞飞");
}
public void changeValue3(String str) {
str = "字符串修改测试";
}
public static void main(String[] args) {
TransferValueDemo transferValueDemo = new TransferValueDemo();
//定义基本数据类型
int age = 20;
transferValueDemo.changeValue(age);
System.out.println("age=" + age);
//实例化Person类
Person person = new Person("abc");
transferValueDemo.changeValue2(person);
System.out.println("PersonName= " + person.getPersonName());
//实例化字符串
String str = "JKL";
transferValueDemo.changeValue3(str);
System.out.println("string= " + str);
/**
* 总结
* 对于基本数据类型,传的的是变量的副本,
* 对于引用类型,传递的是地址,字符串是放在常量池中
*/
}
}
结果
age= 20 //初始化值为20,要修改为30,最后没成功,基本类型传递的是变量的副本
PersonName= 飞飞 //初始化值为abc最后成功修改成飞飞
string= JKL //初始值为"字符串修改测试",最后成功修改为JKL,字符串存在常量池中,执行字符串中的引用