一个案例带你,深入理解Java中的引用类型与对象状态共享

class ChangeIt
{
    static void doIt( int[] z )
    {
        int[] A = z;
        A[0] = 99;
    }
}

class TestIt
{
    public static void main( String[] args )
    {
        int[] myArray = {1, 2, 3, 4, 5};
        ChangeIt.doIt(myArray);
        for (int i = 0; i < myArray.length; i++)
        {
            System.out.print(myArray[i] + " ");
        }
    }
}

这里涉及的是Java中的几个关键知识点:

  1. 引用类型:在Java中,数组是引用类型。这意味着数组变量(如zA)并不直接存储数组的数据,而是存储了对数组对象在内存中的引用(地址)。

  2. 引用赋值:当你执行int[] A = z;时,你并不是在复制数组的内容,而是在复制引用。这意味着A现在指向和z相同的数组对象。这种赋值是浅拷贝(shallow copy),只复制了引用,没有复制对象本身。

  3. 对象状态的共享:由于Az指向同一个数组对象,因此通过A对数组的任何修改(如A[0] = 99;)都会影响到通过z访问到的数组状态。这是因为它们都是访问同一个对象的不同引用。

  4. 堆内存与栈内存:Java中的对象(包括数组)通常存储在堆内存中,而引用本身(即变量)则存储在栈内存中。栈内存中的引用指向堆内存中的对象。通过引用,我们可以访问和修改堆内存中的对象状态。

  5. 方法参数传递:在Java中,方法参数是按值传递的,但对于引用类型,传递的是引用的值(即地址),而不是对象本身的拷贝。因此,在方法内部对引用类型的修改(如果修改的是引用指向的对象的状态,而不是引用本身)会影响到方法外部的对象状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值