5.基本类型引用类型传递
具体代码如下:
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Data
class Person {
private int age;
private String name;
}
public class TestTransferValue {
public void changeInt(int age) {
age = 30;
}
public void changePerson(Person person) {
person.setAge(30);
}
public void changeString(String str){
str="你好";
}
public static void main(String[] args) {
//重点1:更改基本类型的值--->输出的竟然是18而不是30
TestTransferValue testTransferValue = new TestTransferValue();
int age=18;
testTransferValue.changeInt(age);
System.out.println("int---->"+age);
//重点2:修改引用类型的值--->输出修改以后的值
Person person = new Person(18,"吴孟达");
testTransferValue.changePerson(person);
System.out.println("person---->"+person);
//重点3:修改String---->输出的仍是吴孟达
String str="吴孟达";
testTransferValue.changeString(str);
System.out.println("String--->"+str);
}
}
输出:
int---->18
person---->Person(age=30, name=吴孟达)
String--->吴孟达
int类型的传值(注意并没有返回值,只是修
int类型的传值(注意并没有返回值,只是修改其传入的值)
public void changeInt(int age) {
age = 30;
}
重点理解:基本类型的值是存储在各自的线程栈中(线程的工作内存)
引用类型的值
public void changePerson(Person person) {
person.setAge(30);
}
重点理解:局部变量的引用类型:对象名称存放在线程栈中(保存堆中对象的内存地址),具体对象存放在堆中
传递String
public void changeString(String str){
str="你好";
}
重点:字符串常量池的存在(jdk版本号<=1.6字符串常量池在方法区,>=1.7在堆区)
出现str="你好";会直接在常量池创建一个新的字符串"你好",并返回字符串地址,即这两个引用已经没有任何关系
所以main方法输出的是自己的引用!