美文网首页
值传递和引用传递

值传递和引用传递

作者: icecrea | 来源:发表于2017-11-19 10:49 被阅读14次

下面有一个代码非常好帮助理解
我的理解是:
引用在栈中,存储变量堆地址。实际变量在堆中。引用指向变量。
方法参数传递的是堆中地址的值(其实也是栈中变量存储的值),是直接指向堆中对象的,是同一个变量。所以更改操作会影响。
如果引用又指向了一个新开辟的变量地址。就不会影响原地址的对象。
如果另一个引用指向了之前的变量地址并修改,那么也会改变该地址对象的值。
所以,看对象有没有改变,实际上是看堆中该地址存储的值有没有改变!

   public static void main(String[] args)
    {
        StringBuffer s= new StringBuffer("good");
        StringBuffer s2=new StringBuffer("bad");
        test(s,s2);
        System.out.println(s);//9
        System.out.println(s2);//10

        StringBuilder sb = new StringBuilder("iphone");
    }
    

    static void test(StringBuffer s,StringBuffer s2) {
        System.out.println(s);//1
        System.out.println(s2);//2
        s2=s;//3 s2=s=good
        s=new StringBuffer("new");//4 s=new
        System.out.println(s);//5  new
        System.out.println(s2);//6  good
        s.append("hah");//7  s=newhah
        s2.append("hah");//8  s2=goodhah
    }

代码输出

good
bad
new
good
goodhah
bad

值传递:基本类型都在栈中,作为方法变量时传递的是变量的副本。完全不影响。

相关文章

  • Day12-Java

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

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

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

  • Java中的参数传递

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

  • Dart是值传递还是引用传递

    结论:Dart是值传递。 我们先看值传递和引用传递的定义: 值传递和引用传递,属于函数调用时参数的求值策略(Eva...

  • C++基础

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

  • 值传递和引用传递

    值传递 我们可以直接看一个值传递的例子 可见,a 和 b 的值在经过“所谓的”交换函数之后,并没能把值交互。这是为...

  • 值传递和引用传递

    什么是值传递 js是只支持值传递的,举个例子: 此时a的值在函数内是不变的,即复制了一个临时的值,这便是值传递。 ...

  • 值传递和引用传递

    在java中值传递是指传递具体的值,传递的是内容的拷贝,传递后就不关原来的什么事了 引用传递是指传...

  • 值传递和引用传递

    下面有一个代码非常好帮助理解我的理解是:引用在栈中,存储变量堆地址。实际变量在堆中。引用指向变量。方法参数传递的是...

  • 引用传递和值传递

    Java (1)基本数据类型传值,对形参的修改不会影响实参; (2)引用类型传引用,形参和实参指向同一个内存地址(...

网友评论

      本文标题:值传递和引用传递

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