深入理解java值传递

我们在这里通过具体的代码示例来讲解java中的值传递

1、首先我声明一个Student类,用于测试
package com.test;

/**
 * @author zte
 * @date 2020-05-07 18:01:06
 */
public class Student {

    /**
     * 为了方便测试,我这里声明为public
     */
    public String name;

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                '}';
    }
}

2、代码测试java值传递
package com.test;

/**
 * @author zte
 * @date 2020年5月7日 18:00:23
 */
public class PassValue {

    public static void main(String[] args) {

        System.out.println("--------------测试传入数值-----------------");
        int a = 1111;
        int b = 2222;
        exchangea( a , b );
        System.out.println(a);
        System.out.println(b);
        System.out.println("--------------测试传入对象(1)-----------------");
        Student s1 = new Student();
        Student s2 = new Student();
        s1.name = "张三";
        s2.name = "李四";
        exchangeb(s1 , s2);
        System.out.println(s1);
        System.out.println(s2);
        System.out.println("--------------测试传入对象(2)-----------------");
        exchangec(s1 , s2);
        System.out.println(s1);
        System.out.println(s2);
    }

    public static void exchangea(int a, int b){
        int c = a;
        a = b;
        b = c;
    }

    public static void exchangeb(Student a , Student b){
        Student c = a;
        a = b;
        b = c;
    }

    public static void exchangec(Student a , Student b){
        Student c = new Student();
        c.name = a.name;
        a.name = b.name;
        b.name = c.name;
    }
}

运行结果如图:
在这里插入图片描述

3、分析运行结果

首先我们要知道声明一个对象或变量是在栈中实现的,用完以后会出栈操作。

(1)、分析第一种情况

首先是在栈中开辟两个栈帧a和b,调用函数的时候友重新开辟了两个栈帧,函数执行完毕以后释放,对原有的变量a和变量b没产生作用,因此输出原有的值。
在这里插入图片描述

(2)、分析第二种情况

建立对象,涉及到栈和堆。
在这里插入图片描述
在这里插入图片描述

(3)、分析第三种情况

第三种的情况是建立在第二种的基础上,对里面的内容进行了修改,导致最后输出的结果发生了变化。
在这里插入图片描述
在这里插入图片描述
我们从图中可以看到对象指向的内容发生了变化,因此输出的结果发生了变化。以上三种情况就是java中的值传递的过程。

©️2020 CSDN 皮肤主题: 书香水墨 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值