对象变量与数组的一些理解

对象变量

Date birthday = new Date()这里birthday就是对象变量,而不是对象本身,对象本身为 new Date(),可以将对象变量理解成变量的名字,也可以理解成C++里面的指针。这个名字一般情况下不是初始化之后就不能变,也可以作为别的对象的名字。

对象数组

好了,现在来说说数组。先看代码Date[] births = new Date[2]这时,这时你可能会想到,既然说对象变量是指针,那births不就是元素为指针的数组了吗?很遗憾,结果出乎你意料,births准确来说是一个指针,一个指向数组的指针,而不是指针的集合。

举例子

class tea {
    private int id;

    public tea(int id) {
        
        this.id = id;
    }

    public int getId() {
        
        return id;
    }

}
	 public static void main(String[] s) {

        tea[] arr=new tea[2];
        arr[0]=new tea(1);
        arr[1]=new tea(2);

        tea[] a=arr;
        a[0]=new tea(8);

        System.out.println(arr[0].getId());

    }

结果
在这里插入图片描述
分析:如果arr是一个元素为指针的数组,aarr的克隆,理论上执行a[0]=new tea(8),不应该对arr的产生影响,而只是改变了a中指针的指向。但是事实与之不符,所以arr准确来说是个指针,或者说是一个tea数组的名字,执行a[0]=new tea(8)实际上是对数组本身的直接操纵。如果你说它是个tea数组,也没什么问题,毕竟对象变量名和对象(数组也是对象),从我们的习惯中可以看作等同,都表示着同一个实体。

后语

有了以上结论,那当我们把数组当成函数参数来传参时,要认识到形参是指针的克隆,实参也是指针。在函数体内执行a[0]=new tea(8)a为形参)之类代码时,实则是对实参所指向数组的直接操纵。若只想要传入数组的值,可以先对数组进行克隆,再把克隆后的数组的指针作为实参。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值