java中的值传递

1.概述

引用类型中,java中全部都是值传递,传递对象里的值,而不会传递对象本身。

2.代码示例


public class Main {
    public static void main(String[] args) {
        Student a = new Student();
        Student b = new Student();
        a.setName("zhangsan");
        b.setName("lisi");
        System.out.println(a);
        System.out.println(b);
        swap1(a,b);
        System.out.println(a);
        System.out.println(b);
        swap(a,b);
        System.out.println(a);
        System.out.println(b);
        int c =10;
        int d=20;
        Integer e =10;
        Integer f=20;
        swap(c,d);
        System.out.println(c);
        System.out.println(d);
        swap(e,f);
        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 swap(Student e, Student f) {
        Student a= e;
        e=f;
        f=a;
    }

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

输出

Student{name='zhangsan', School='null'}
Student{name='lisi', School='null'}
Student{name='lisi', School='null'}
Student{name='zhangsan', School='null'}
Student{name='lisi', School='null'}
Student{name='zhangsan', School='null'}
10
20
10
20

3.代码逻辑

初始化状态:(左边栈,右边堆)

 

 

swap1方法执行:

出栈前:

 

 

由于新调用了swap方法,所以在栈中引入了新栈针,记作a’,b',为方法参数。a'为a的值,b'为b的值。方法执行完后,e、f、name属性出栈,a.getName()、b.getName()值发生改变。

 swap方法执行:

初始化状态:

出栈:

 

a‘指向的是e这个对象,也就是a指向的对象,当e和f指向的对象交换时,并不影响a和b,方法执行完后,a‘、e、f出栈,a和b仍然指向之前的对象,所以a和b不会改变。

整型int的swap方法调用:

int类型的数据是整型值,所以直接在栈里分配。

同理 调用新方法、引入栈针,再声明方法参数c‘、d‘。

调用完方法后,c‘、d‘会出栈,并不会对原始的c、d值产生影响,所以值不变。

 

 

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值