• Java值传递


    package com.yanshu;
    
    /**
     * @author :yangyuanyuan
     * @description:TODO
     * @date :2021/1/25 13:47
     */
    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 changeValue1(int age) {
            age = 30;
        }
    
        public void changeValue2(Person person) {
            person.setPersonName("XXXX");
        }
        public void changeValue3(String str) {
            str = "XXX";
        }
    
        public static void main(String[] args) {
            TransferValueDemo test = new TransferValueDemo();
    
            // 定义基本数据类型
            int age = 20;
            test.changeValue1(age);
            System.out.println("age ----" + age);
    
            // 实例化person类
            Person person = new Person("abc");
            test.changeValue2(person);
            System.out.println("personName-----" + person.getPersonName());
    
            // String
            String str = "abc";
            test.changeValue3(str);
            System.out.println("string-----" + str);
    
        }
    }

    运行结果:

    栈管运行,堆管存储

    CHANGEVALUE1的执行过程

    八种基本数据类型,在栈里面分配内存,属于值传递

    当们执行 changeValue1的时候,因为int是基本数据类型,所以传递的是int = 20这个值,相当于传递的是一个副本,main方法里面的age并没有改变,因此输出的结果 age还是20,属于值传递。

    CHANGEVALUE2的执行过程

    因为Person是属于对象,传递的是内存地址,当执行changeValue2的时候,会改变内存中的Person的值,属于引用传递,两个指针都是指向同一个地址

    CHANGEVALUE3的执行过程

    String不属于基本数据类型,但是为什么执行完成后,还是abc呢?

    这是因为String的特殊性,当我们执行String str = "abc"的时候,它会把 abc 放入常量池

    当我们执行changeValue3的时候,会重新新建一个xxx,并没有销毁abc,然后指向xxx,然后最后我们输出的是main中的引用,还是指向的abc,因此最后输出结果还是abc。

  • 相关阅读:
    python 读写json文件(dump, load),以及对json格式的数据处理(dumps, loads)
    Postman + newman + jenkins 的API自动化测试应用
    Selenium + WebDriver 各浏览器驱动下载地址
    pythonon ddt数据驱动二(json, yaml 驱动)
    python ddt 实现数据驱动一
    Python + logging 输出到屏幕,将log日志写入文件
    python 多线程小练习
    pycharm + git 的集成使用
    Map的遍历方式
    69道Spring面试题和答案
  • 原文地址:https://www.cnblogs.com/qfdy123/p/14325072.html
Copyright © 2020-2023  润新知