黑马程序员---Java基础学习之面向对象的值传递和引用传递


面向对象的值传递

当把x传递给另外一个变量,不管是局部变量还是 全局变量,都是值传递,即把x指向的物理内存中的这个5 传递给了另外一个变量,例如int x=5; 这句话之后就把3传递给了method()方法的变量x,可能x在内存中又开辟了一个物理地址空间,但是存储的依然是5。之后就任凭x随便改变里面的值,瞎折腾都可以,但是x指向的那个内存单元中的5不会变的。

例:

class Demo
{
    public static void main(String[] args)
    {
        int x = 5;//定义变量x并赋值5
        method(x);//调用method()方法并传递变量x的值勤
        System.out.println("x=" + x);//注意,这儿打印的变量值
    }
    public static void method(int x)//方法中定义一个int类型的参数列表来接受一个值勤
    {
        x = 6;
    }
}

引用传递

对于基本类型和基本类型变量被当作参数传递给方法时,是值传递。在方法实体中,无法给原变量重新赋值,也无法改变它的值。
而对象作为参数,如果在方法中把对象作为参数,方法调用时,参数传递的是对象的引用,即在方法调用时,实际参数把对对象的引用传递给形式参数。这是实际参数与形式参数指向同一个地址,即同一个对象,方法执行时,对形式参数的改变实际上就是对实际参数的改变,这个结果在调用结束后被保留了下来。

例:

class Demo
{
    int x;//定义一个类的成员变量x
    public static void main(String[] args)
    {
        Demo d = new Demo();//新建一个对象实例d
        d.x = 5;//给对象中的变量赋值勤
        d.method(d);//调用方法并传递一个对象的引用过去
        System.out.println("d.x=" + d.x);//打印类的成员变量的值勤
    }
    public static void method(Demo d)//方法的参数列表定义一个对象类型
    {
       d.x = 6;//赋值给类的成员变量
    }
}


你可能感兴趣的:(学习心得)