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方法输出的是自己的引用!

posted @ 2022-05-19 20:09  努力的达子  阅读(38)  评论(0编辑  收藏  举报