1.普通类型值传递
2.引用类型地址传递
3.String指向常量池中的
package com.chaohu.interviewquestions;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
public class TransferValue {
public void changeValue1(int age){
age = 30;
}
public void changeValue2(Person person){
person.setName("xxx");
}
public void changeValue3(String str){
str = "xxx";
}
public static void main(String[] args) {
TransferValue transferValue = new TransferValue();
/*
* 1.基本类型是值传递(传的是值的复印件)。
* 2.栈管运行,堆管存储。
* 3.在方法栈中,changeValue1方法的age是30,但是main方法先进栈。
* 所以changeValue1执行完就带着30跳出方法栈了,main的age没变。
*/
int age = 20;
transferValue.changeValue1(20);
System.out.println(age);
/*
* 1.引用类型是地址传递。
* 2.main和changeValue2方法中的person都指向一个对象。
*/
Person person = new Person(1,"abc");
transferValue.changeValue2(person);
System.out.println(person.getName());
/*
* 1.String在常量池中,你指你的我指我的。
* 2.常量池中有我就指向它,没有我就指向新地址,创建一个,以后别人也可以指。
*/
String str = "abc";
transferValue.changeValue3(str);
System.out.println(str);
}
}
@Data
@NoArgsConstructor
@AllArgsConstructor
class Person {
Integer id;
String name;
}