现在的位置: 首页 > 综合 > 正文

JAVA值传递机制

2018年03月18日 ⁄ 综合 ⁄ 共 1141字 ⁄ 字号 评论关闭

在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

抱歉!评论已关闭.