java基础(参数传递)

java中的参数传递都为值传递,八大基本类型在方法中传值是直接传值的,无论是在java还是c中都是这样的。而引用类型在传递时会传递过去一个它在堆中的地址。这样的参数传递方式就会导致一些在参数交换产生一些问题,下面这些数值交换方法的使用就会体现出这一点。

public class Main {
    public static void main(String[] args) {
        SingleInstance instance = SingleInstance.getInstance();
        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;
    }
}

swap1交换是会将a和b的地址传进去,这个时候,name会通过get方法拿到name所在的存储地址,只后对name地址进行交换,最终结果就会让a和b的name交换。

而与其相对应的是swap,这里e和f分别指向a和b的堆中地址,交换了e和f的地址但是并不影响到a和b,e和f出栈后,a和b不变

swap(int a, int b)交换的是传入的a和b,在出栈后不会影响到c和d。

swap(Integer a, Integer b)因为是包装类型所以和上面一样,a和b指向的地址没有发生改变所以不变。

从上面可以看出来,如果真的想要交换对象中的数据就必须要将里面最底层的数据全部交换才可以,否则只是方法内的地址变了并不影响方法外的变量存储地址。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值