zoukankan      html  css  js  c++  java
  • 值传递和引用传递的区别

    先说变量

    Java中有基础变量(8种基本数据类型的)和引用变量(除了8种基本数据类型之外的, 一般指的是对象类型的变量, 也称引用)。

    注意:String也是对象类型的一种,但它作为一种比较常用的数据类型, 较于纯粹的对象类型还有不同之处。

    再说字面值

    字面值指的是某个类型的合法取值, 或者说,可以为该类型的变量赋值的数据。

    例如, “int a = 5;”,  a就是变量, 5就是字面值。

    eg1:

      Int a = 10;

      int b = a; // a的字面值赋值/传递给b

      // 此时输出a、b字面值皆是10

      b  = 20; // b的字面值赋值为20

      // 此时输出b字面值为20,a字面值仍旧是10

    总结:

    【值传递不影响传递的另一方数据(a)】

    然后是引用中存的不是数值那是啥?

    对于基本变量而言,其中存储的是值,而引用(可以看作指针)中存放的是?

    对于对象类型来说,在计算机中, 对象本质上是一块内存区域(内存块),每一块儿内存块儿,都会有它的首地址,引用就是指向了这个首地址.(可以稍稍看下计算机原理)

    所以,引用中保存的就是对象在内存中的首地址。

    有一点要明确,引用中所保存的对象的首地址,有别于真正的对象,我们可以通过引用来操作一个对象。

    最后说一下什么是多个引用指向同一个对象

    class MyValue{

      int value;

    }

    public class TestMyValue{

      public static void main(String args[]){

        MyValue mv1 = new MyValue();// 此时value属性默认值为0

        mv1.value = 100;// 此时设置value属性值为100

        MyValue mv2 = mv1;// 将mv1的值传给mv2,由于mv1中存储的是对象的首地址,故mv2也指向了相同的对象首地址

        mv2.value = 200;// 改变对象的value属性值为200

        System.out.println(mv1.value);// 结果是200 ,原因是mv1引用和mv2引用指向了同一块内存数据(对象),mv1引用和mv2引用都有修改的权利, 先然数据被mv2引用修改为200。

      }

    }

    总结:

    【引用传递有可能会改变另一方,应该说是一起变化的(mv1和mv2)】

  • 相关阅读:
    信号量的简单使用
    [Unity 3D] Unity 3D 性能优化(二)
    Android 开机动画源码分析
    关于FTP操作的功能类
    ArcGIS Engine 改变线IPolyline的方向
    使用ORACLE SQL Tuning advisor快速优化低效的SQL语句
    Linux CPU 负载度量公式
    Java垃圾回收机制
    常用的shell命令整理
    UVa340
  • 原文地址:https://www.cnblogs.com/LearnSB/p/11037722.html
Copyright © 2011-2022 走看看