前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java 引用传递和值传递

Java 引用传递和值传递

作者头像
星尘的一个朋友
发布2020-11-25 15:04:01
1.2K0
发布2020-11-25 15:04:01
举报

还是没能通俗易懂

  • 引用传递就是指 将对象的地址值进行传递
  • 值传递 就是把对象的值进行传递
代码语言:javascript
复制
// 我有一个类    ClassA

// new 一个对象 ClassA classa =  new ClassA();

我调用一个方法 fun1
代码语言:javascript
复制
 void fun1(ClassA classa) {   // 这里面的ClassA 就是做的引用传递,他是个形参,那实际参数是什么呢?? 这里不对,实参是对象的值

}

void  fun2(int a, String b, Long c) { // 这里的参数  a ,b ,c 是形参,他代表的是一个具体的值。所以他的传递就是值传递

} 

// ClassA classa int a, String b, Long c 都是形参

// new ClassA(); 是实参

看下代码 你就明白了

代码语言:javascript
复制
 public static void main(String args[]) {
        People people = new People();
        System.out.println("people = " + people);
        String a = "string";
        System.out.println("a = " + a);
        int i = 111;
        System.out.println("i = " + i);
        double j = 11.12223;
        System.out.println("j = " + j);
    }
代码语言:javascript
复制
people = People@5fd0d5ae  
// 这里面的 People@5fd0d5ae 就是 对象 people 在堆中的地址  他在作为参数的时候,传的就是这个东西 
// 然后你在方法里做逻辑的时候,用的就是这个地址对应的值,你去操作他,一旦你对这个值进行了修改,那么
// 源对象的值,也会被修改,就好比,我告诉你冰箱里有一瓶水,你喝了三分之一,等我回家的时候,再去看那瓶水就是被你喝过的。是的
// 这个就是引用传递  引用类型传引用,形参和实参指向同一个内存地址(同一个对象),所以对参数的修改会影响到实际的对象;
a = string
i = 111
j = 11.12223

java中的基本类型,包括string在内 都是值传递,他们的改变,不会影响源数据。

值传递只会作用在方法内部,不会影响方法外的数据。

代码语言:javascript
复制
 public static void main(String[] args) {
        // 我们把这个param传到了方法里,方法对其进行了修改
        String param = "我是参数";
        System.out.println("\nparam = " + param);
        // 执行修改操作,引用传递的值将会被改变,值传递的值将不受影响
        change(param);
        System.out.println("\n我是方法执行过的参数 param , 我现在的值是 = " + param);
    }

    private static void change(String param) {
        System.out.println("传入进来的参数的值 param = " + param);
        System.out.println("\n下面我的值将会被改变");
        // 方法执行过程中对值传递的变量进行修改,不会影响源数据
        param = "我把值传递的内容改了";
        System.out.println("\n我已经把 param 内容修改掉了,修改成了 :" + param);
    }
代码语言:javascript
复制
param = 我是参数
传入进来的参数的值 param = 我是参数

下面我的值将会被改变

我已经把 param 内容修改掉了,修改成了 :我把值传递的内容改了

我是方法执行过的参数 param , 我现在的值是 = 我是参数
引用传递
代码语言:javascript
复制
    public static void main(String[] args) {
        StringBuilder a = new StringBuilder("A");
        StringBuilder b = new StringBuilder("B");
        operate(a, b);
        System.out.println("--------------------------");
        System.out.println(a + "." + b);
    }

    static void operate(StringBuilder x, StringBuilder y) {
        x.append(y);
        System.out.println("x = " + x);
        y = x;
        System.out.println("y = " + y);
    }
-------------------------
x = AB
y = AB
--------------------------
AB.B
说明

这个问题的关键在于 a,b,x,y 的地址指向; y = x 与 b = a 是不等价的!! 发生改变的是 y 指向的值变成了和 x 指向的相同, 此时 y = AB(因为append方法改变的x原有的值) 而此时 b 的指向并没有发生改变。

划重点

引用传递过程中,只有引用对象的值发生了改变才会影响源数据。地址的改变不会影响源数据。


本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-05-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 还是没能通俗易懂
    • 引用传递
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档