java中 引用传递、值传递的理解(数组,自定义类,基本数据类型,String类)...

代码部分:

    public static void main(String[] args) {
        testInt();
        testString();
        testArray();
        testX();
    }

    public static void testInt() {
        int a = 1;
        int b = a;
        a = 2;
        System.out.println("b = "+b);
        changeInt(a);
        System.out.println("a = "+a);
    }

    public static void testString() {
        String a = "1";
        String b = a;
        a = "2";
        System.out.println("b = "+b);
        changeString(a);
        System.out.println("a = "+a);
    }

    public static void testArray() {
        int[] a = {1,2,3};
        int[] b = a;
        a[0] = 2;
        System.out.println("b[0] = "+b[0]);
        changeArray(a);
        System.out.println("a[0] = "+a[0]);
    }

    public static void testX() {
        X a = new X("1");
        X b = a;
        a.setValue("2");
        System.out.println("b.value = "+b.getValue());
        changeX(a);
        System.out.println("a.value = "+a.getValue());
    }


    static void changeInt(int a) { a = 100;}

    static void changeString(String a) { a = "100";}

    static void changeArray(int[] a) { a[0] = 100;}

    static void changeX(X a) { a.setValue("100");}
输出结果补充,如下:
b = 1
a = 2
b = 1
a = 2
b[0] = 2
a[0] = 100
b.value = 2
a.value = 100

结果分析:

将数据赋值或当做参数传递的时候:
1,对于基本数据类型,String类, Integer, Double等immutable的类型 都是 值传递;
2,对于数组,其他类等,都是引用传递;

图形表达:

1331009-20180917104934023-489766168.png

//2018-9-17更新
如果非要谈论是否java里只有值传递,可以把引用传递看成:实际上传递了引用的值。
补充代码与输出如下



public static void testX02() {
    X a = new X("1");
    changeX02(a);
    System.out.println("a.value = "+a.getValue());
    }

static void changeX02(X a) {
    a = new X("");
    a.setValue("100");
}

上方代码输出结果:a.value = 1
也就是说testX02中的a,仍然指向最初定义value为“1”的对象;
当做参数调用changeX02后,只能通过引用去改变对象,不能去改变其指向对象;
所以传递的是引用的复制,也就是上图中的黄色箭头。

转载于:https://www.cnblogs.com/kangkaii/p/8419094.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值