Java-值传递

问:Java是值传递?还是引用传递?

答:Java只有值传递

例子:

1,入参为基础数据类型时

package com.company;

public class Main {

    public static void main(String[] args) {
        int i = 0;
        System.out.println("main()改变前:"+i);
        change(i);
        System.out.println("main()改变后:"+i);
    }

    public static void change(int i){
        i = 1;
        System.out.println("change()改变后:"+i);
    }
}

结果:

main()改变前:0
change()改变后:1
main()改变后:0

2,入参为引用数据类型一时

package com.company;

public class Main {

    public static void main(String[] args) {
        String i = "a";
        System.out.println("main()改变前:"+i);
        change(i);
        System.out.println("main()改变后:"+i);
    }

    public static void change(String i){
        i = "b";
        System.out.println("change()改变后:"+i);
    }
}

结果:

main()改变前:a
change()改变后:b
main()改变后:a

3,入参为引用数据类型二时

package com.company;

import com.basis.entity.Info;
import com.basis.entity.Person;

public class Main {

    public static void main(String[] args) {
        Person person = new Person();
        person.setAdress("北京");
        Info info = new Info();
        info.setIDCard("111");
        info.setName("马师");
        person.setInfo(info);
        System.out.println("main()改变前:"+person);
        change(person);
        System.out.println("main()改变后:"+person);
    }

    public static void change(Person p){
        p.setAdress("上海");
        Info info = p.getInfo();
        info.setIDCard("222");
        info.setName("法老");
        p.setInfo(info);
        System.out.println("change()改变后:"+p);
    }
}

结果:

main()改变前:Person{adress='北京', info=Info{IDCard='111', name='马师'}}
change()改变后:Person{adress='上海', info=Info{IDCard='222', name='法老'}}
main()改变后:Person{adress='上海', info=Info{IDCard='222', name='法老'}}

分析:

通过三个例子,貌似得不出Java只有值传递的结论,第三种的引用类型中的值也发生了改变,这是怎么回事?

  因为当入参为引用类型时,传递的其实是对象的引用地址。

  虽然对象内的变量值发生了改变,但是对象的引用地址一直没有发生变化,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值