美文网首页
一次讲透引用传递和值传递的区别

一次讲透引用传递和值传递的区别

作者: 半山腰烤苞米 | 来源:发表于2022-05-05 23:20 被阅读0次

首先回顾一下 堆、栈

int age = 22;

String name = newString("shuaibei");

如果,我们分别对 age、name 变量赋值,会发生什么呢?

age = 18;

name = new String("xiaobei");

age 仅仅是将栈上的值修改为 18,而 name 由于是 String 引用类型,所以会重新创建一个 String 对象,并且修改 name,让其指向新的堆对象。(细心的话,你会发现,图中 name 执行的地址我做了修改)

然后,之前那个对象如果没有其它变量引用的话,就会被垃圾回收器回收掉。

这里也要注意一点,我创建 String 的时候,使用的是 new,如果直接采用字符串赋值,比如:

String name = "shuaibei"

那么是会放到 JVM 的常量池去,不会被回收掉。


值传递

public  static  void  main(String[] args) {

        int b =20;

        change(b);// 实参 实际上的参数

        System.out.println(b);

    }

//形参 形式上的参数  

  public  static  void  change(inta){

        a=100;

    }

结果:20

形参只是实参创建的一个副本,副本改变了,原本当然不可能跟着改变;

引用传递

    public  static  void  main(String[] args) {

        int[] a={1,2,3};

        System.out.println(a[0]);

        change(a);

        System.out.println(a[0]);

    }

    public  static  void  change(int[] a ){

        a[0]=100;

    }

结果:1        100

由于引用传递,传递的是地址,方法改变的都是同一个地址中的值(同一个对象),

原来a[0]指向0x13地址,值是1,

后来在a[0] 指向的也是0x13地址,将值变成了100所以,

再查询a[0]的值的时候,值自然变成了100

总结:

无论引用传递值传递就是将自己中的参数列表中局部参数 copy 后传递过去。(基本数据类型,就是copy数据。非基本数据类型就copy 引用地址。)

所有也有人说 JAVA中 就是值传递。(引用地址也是值)

相关文章

  • 一次讲透引用传递和值传递的区别

    首先回顾一下 堆、栈 int age = 22; String name = newString("shuaibe...

  • C++基础

    C++ 值传递、指针传递、引用传递详解C++中引用传递与指针传递区别 引用传递和指针传递的区别 引用的规则:(1)...

  • java是值传递

    值传递和引用传递最大的区别是传递的过程中有没有复制出一个副本来,如果传递的是副本,那就是值传递,否则就是引用传递 ...

  • 快速区别值传递和引用传递

    复习Java知识的时候又看到值传递和引用传递的区别,然后就查询一下,结果都是Java到底是值传递还是引用传递之争,...

  • 函数参数传递中值传递、地址传递、引用传递的区别?

    函数参数传递中值传递、地址传递、引用传递的区别?1.值传递:形参拷贝实参的值,有内存分配和释放;不会改变原始值2....

  • Day12-Java

    值传递和引用传递 值传递是值的拷贝, 引用传递是引用的拷贝 String 类型是引用类型, new String ...

  • Java中的参数传递

    为了便于理解,会将参数传递分为按值传递和按引用传递。按值传递是传递的值的拷贝,按引用传递传递的是引用的地址值,所以...

  • Java所有参数-对象引用及基本类型值--都是值传递

    前言 当前主要存在两种传递方式,值传递和引用传递,先简单介绍值传递和引用传递值传递(pass by value)是...

  • 第4章: 变量、作用域和内存问题

    4.1 基本类型和引用类型的值 区别:基本类型传递的是值, 操作的也是值本身.引用类型传递是对象的引用(也叫地址 ...

  • iOS 基础知识

    1. 值传递和引用传递的区别? 所谓值传递,就是说仅将对象的值传递给目标对象,就相当于copy;系统将为目标对象重...

网友评论

      本文标题:一次讲透引用传递和值传递的区别

      本文链接:https://www.haomeiwen.com/subject/eaaoyrtx.html