zoukankan      html  css  js  c++  java
  • 值传递与引用传递一张图就能理解

      不可变类是指当创建了这个类的实例后,就不允许修改它的值的类,也就是一个对象一旦被创建出来,在其整个生命周期中,它的成员变量就不能被修改了,只允许其他程序进行读操作,而不允许其他程序进行修改操作。

      在java类库中,所有基本类型的包装类都是不可变类,如Integer、Float等。此外,String也是不可变类。

      在java中,除了8种原始数据类型外,其他的类型都是对象,在方法调用的时候,传递的都是引用。从本质上讲,引用也是按值传递,只不过传递的这个值是对象的引用而已,因此,在方法调用的时候,对形参引用所指对象属性值的修改对实参可见。但是,对引用值本身的修改对实参是不可见的。

    举个简单引用传递的例子:

    public class Person {
    
        private int age;
        private String name;
    
        public Person(int age, String name) {
            this.age = age;
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public static void main(String args[]) {
            int n = 0;
            Person person = new Person(28, "zhansan");
            System.out.println("person1:" + person);
            person.Uname(person);
            person.Pname(person);
            person.cname(n);
            System.out.println("main:" + n);
        }
    
        public void Uname(Person person) {
            person.age = 8;
            person.name = "L";
            System.out.println("person2:" + person);
        }
    
        public void Pname(Person person) {
            person.age = 7;
            System.out.println("person3:" + person);
        }
    
        public void cname(int n) {
            n = n + 2;
            System.out.println("cname:" + n);
        }
    }

    输出结果:

    由输出结果可以看出,对象的地址为同一个,所以指向的是同一个对象;

    而值传递,改变的只是形参副本。

  • 相关阅读:
    Tensorflow实战(二):Discuz验证码识别
    文竹越长越乱?教你7种修剪方法可保持文竹株形优美,矮壮浓密
    拼应需求分析
    软工实践结对第二次作业
    软工团队第一次作业--团队展示
    学习命令行传参
    软工实践第三次作业-原型设计
    软工实践第二次作业2.0
    软工实践第二次作业
    学习c++ofstream和ifstream
  • 原文地址:https://www.cnblogs.com/windy-xmwh/p/9205724.html
Copyright © 2011-2022 走看看