证明java方法参数值传递

在正文开始之前,我们先了解一下值传递和引用传递(定义)

      值传递:(形式参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参数值的改变不影响实际参数的值。
      引用传递:(形式参数类型是引用数据类型参数):也称为传地址。方法调用时,实际参数是对象(或数组),这时实际参数与形式参数指向同一个地址,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,这个结果在方法结束后被保留了下来,所以方法执行中形式参数的改变将会影响实际参数。

正文开始:

关于Java方法参数是值传递还是参数传递,首先我们应该明确的是值传递的。下面我们看一下例子:

public class StudentTest  {
    public void test1(){
        Student student=new Student();
        student.setName("千千");
        ClassInfo classInfo=new ClassInfo();
        classInfo.setName("5班");
    }
        public static void main(String[] args) {
        Student a = new Student();
        Student b = new Student();
        a.setName("千千");
        b.setName("尔尔");
        //初始情况下输出a和b,a就是 千千,b就是 尔尔
        System.out.println(a);
        System.out.println(b);
        //新调用了一个方法,所以引入新的栈帧
        swap1(a,b);
        System.out.println("=============分割线=============");
        System.out.println(a);
        System.out.println(b);
        swap2(a,b);
        System.out.println("=============分割线=============");
        System.out.println(a);
        System.out.println(b);
        int c =10;
        int d=20;
        Integer e =10;
        Integer f=20;
        swap3(c,d);
        System.out.println("=============分割线=============");
        System.out.println(c);
        System.out.println(d);
        swap4(e,f);
        System.out.println("=============分割线=============");
        System.out.println(e);
        System.out.println(f);
    }

    private static void swap1(Student e, Student f) {
        String name = e.getName();
        e.setName(f.getName());
        f.setName(name);
    }

    private static void swap2(Student e, Student f) {
        Student aa= e;
        e=f;
        f=aa;
    }

    private static void swap3(int a, int b) {
        int c =a;
        a=b;
        b=c;
    }
    private static void swap4(Integer a, Integer b) {
        Integer c =a;
        a=b;
        b=c;
    }
}

这个代码在我没有运行之前,自己做出来的答案是:

千千 尔尔
尔尔 千千
千千 尔尔
20 10
10 20

但运行之后这个答案是错的,

运行的结果是:

 下面我们分析一下

首先是第一个的输出,就是千千  尔尔,没有做任何的交换

第二个的输出:

之后方法执行完毕之后,方法里面的变量出栈,结果为:

 第三个的输出:

 结果就是:尔尔 千千,相对于第二个的输出没有改变

再看第四个和第五个的输出,是相同的道理:

 

 我们再看一下相关的代码,其调用的方法


    private static void swap3(int a, int b) {
        int c =a;
        a=b;
        b=c;
    }
    private static void swap4(Integer a, Integer b) {
        Integer c =a;
        a=b;
        b=c;
    }

 在方法中,都是新引入了一个int a,int b或者是Integer a, Integer b,这是对引入的变量进行了数值交换,在方法执行完毕之后,变量就会出栈,不会对之前的值产生任何的影响,所以他们的输出都是10 20。

这个例子我们可以清楚地java是值传递。

举例证明完毕~~~

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值