18.当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?

本文详细解释了Java中的值传递机制,通过一个具体的Person类实例演示了如何改变对象属性但不改变对象引用的过程。

是值传递。Java语言的方法调用只支持参数的值传递。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的属性可以在被调用过程中被改变,但对对象引用的改变是不会影响到调用者的。C++和C#中可以通过传引用或传输出参数来改变传入的参数的值。在C#中可以编写如下所示的代码,但是在Java中却做不到。

public class Person {

    private int id;

    Person(int id){
        this.id = id;
    }

    public void setId(int id){
        this.id = id;
    }

    public int getId(){
        return this.id;
    }

    public static void change(Person person){
        person.setId(7);
    }

    public static void main(String[] args) {
        Person cleverCode = new Person(5);
        System.out.println(cleverCode.getId());
        change(cleverCode);
        System.out.println(cleverCode.getId());
    }
}

5
7

在这里插入图片描述
过程:
1、cleverCode指向了堆区new Person()引用,引用地址为的0X00000S13。
2、change方法,参数传递的时候,person拷贝了cleverCode指向的堆引用地址。
3、当调用change方法的时候,里面setId(7)。实际上是调用了new Person().setId(7)。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值