JAVA值传递机制

本文深入探讨Java中方法参数的传递机制,包括原生数据类型的值传递与引用类型的引用传递的区别,通过具体示例代码展示了这两种情况下变量变化的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在java中,对于方法参数传递,不论传递的是原生数据类型还是引用类型,统一都是值传递(pass by values)。引用类型传递的是地址,传完之后两个引用指向同一个对象,若其中一个引用改变了对象的属性,那么这中改变也将会反映到其他的引用中。原生数据传递的是变量的数值,传完之后你是你,我是我,你的改变不会影响到我。这么说很抽象,不容易理解,下面的代码或许对理解有帮助。

public class ParamTest
{
    int i = 10;

    public static void main (String[] args)
    {
        ParamTest param = new ParamTest();
        Person person = new Person();
        person.change(param);
        System.out.println (param.i);
    }
}

class Person
{
    public void change(ParamTest param1)
    {
        param1.i = 20;
    }
}

输出的结果i的值为20.我们先来看看main函数:

第一行,创建了ParamTest类的一个对象,并且把对象的地址覆给了引用变量param。当执行到Person类中的change方法时,change方法创建了一个ParamTest类的引用param1,将main方法中的param中的地址值传递给了形参param1,两个引用变量指向同一个对象。change方法利用param1这个引用变量,改变了对象的属性值,而打印输出param.i的时候,输出已改变了的值。这说明两个引用变量指向同一个对象。若一个引用变量改变了对象的属性,实际上改变了对象本身,因此这种改变也会反映到其他引用变量上。

public class ParamTest
{

    int i = 10;

    public static void main (String[] args)
    {
/*        ParamTest param = new ParamTest();
        Person person = new Person();
        person.change(param); */
        int i = 10;
        person.change(i);
        System.out.println (i);
//        System.out.println(param.i);
    }
}

class Person
{
    public void change(ParamTest param1)
    {
        param1.i = 20;
    }

    public void change (int age)
    {
        age = 40;
    }
} 
以上代码中在Person类中又定义了一个change方法,它接收的参数是int型。在main函数中,我调用了第二个change方法,执行这个方法的时候,是将i的值赋给了age,之后change方法并不会改变i的值了,因此i的值打印输出为10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值