zoukankan      html  css  js  c++  java
  • java值传递与引用传递

    1、按值传递是什么

    传递的是值的拷贝,也就是说传递后就互不相关了(基本数据类型和String都是这样)。

    public class Test {
        private void test(int a){
                a = 5;
                System.out.println("test方法中的a==="+a);
    }
        public static void main(String[] args) {
                TempTest t = new TempTest();
                int a = 3;
                t.test(a);//传递后,test方法对变量值的改变不影响这里的a
                System.out.println(”main方法中的a===”+a);
            }
    }
    运行结果是:test方法中的a===5   main方法中的a===3

    2、按引用传递是什么

    在方法调用时,传递前和传递后都指向同一个引用(也就是同一个内存空间)。

    public class TempTest {
    
    private void test1(A a){
            a.age = 20;
            System.out.println("test1方法中的age="+a.age);
    }
    public static void main(String[] args) {
                    TempTest t = new TempTest();
                    A a = new A();
                    a.age=10;
                    t.test1(a); //这里传递的参数a就是按引用传递
                    System.out.println(”main方法中的age=”+a.age);
            }
    }
    class A{
                public int age = 0;
    }
    运行结果如下:test1方法中的age=20     main方法中的age=20

    3、解释

    值传递:针对基本类型
      方法调用时,实际参数把它的传递给对应的形式参数,函数接收的是原始值的一个copy,此时内存中存在两个相等的基本类型,即实际参数和形式参数,后面方法中的操作都是对形参这个值的修改,不影响实际参数的值。
      String表现为值传递,主要是因为String是不可变的!如何理解不可变?我们一般说的改变一个String变量,其实并不是改变的这个String本身,而是用一个新的String去替换掉原来的,原来的String本身并没有变。

    String str1 = "old";
    str1 = "new";//不是在原内存地址上修改数据,而是重新指向一个新对象,新地址。  
      //对String对象的任何改变都不影响到原对象,相关的任何操作都会生成新的对象

    引用传递:
      方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中相对应的形式参数,函数接收的是原始值的内存地址;在方法执行中,形参和实参内容相同,指向同一块内存地址,方法执行中对引用的操作将会影响到实际对象。

  • 相关阅读:
    Linux 安装 PostgreSQL
    【Linux】ZeroMQ 在 centos下的安装
    Celery
    Django学习之完成数据库主从复制、读写分离和一主多从情况下的使用办法
    python异步编程之asyncio(百万并发)
    Python正则表达式中的re.S,re.M,re.I的作用
    云开发 :云原生(Cloud Native)
    极简Unity调用Android方法
    UnityShader快速上手指南(四)
    UnityShader快速上手指南(三)
  • 原文地址:https://www.cnblogs.com/qingchen521/p/8575770.html
Copyright © 2011-2022 走看看