java里面的"指针"——索引

    一般学习编程语言都是从c语言开始,c语言里面有个东东叫"指针",都知道c语言里面指针用的不好会带来不安全性,学习java的时候都知道java里面没有指针。在我看来,java里面还是有类似指针的地方,java里面叫做索引。索引指向的是对象在jvm里面分配的内存地址,由于中间隔了一层jvm,所以安全性有保障。


   我们来看下面的代码截图:


  如果是对象当作参数,方法中对对象的属性进行改动,那么出了这个方法对象还是被改动了(Stu的无参构造方法是默认的)。可以理解为方法参数实际上是对象的索引,方法外和方法内都持有共同的索引,方法内和方法外都对索引指向的内存单元进行操作。


   再来看一段代码截图:


  如果给方法传了一个对象索引,在方法里面更改索引地址,是不会影响原来的数据,要想影响,只能是把新索引地址返回方法调用处。


  再来看看一个集合的错误用法:


  错误的现象从打印的结果可以看出来,集合里的元素都是一样的,原因是集合里面存的是对象的索引,而不是对象本身的内容。由于s对象是在for外面定义的,for循环中依次对索引指向的内存进行修改,同时依次将这个索引添加到集合中,最后列出集合的元素时又通过对象索引去查找,由于索引相同所以集合元素也是相同的(set的元素唯一性就不说了)。从此可以看出解决的方法是只需将s对象声明在for循环内,生成多个索引。



  再来看看for循环和for each碰上索引会发生什么:


  这个其实是从我犯的错误中提取出来的,项目业务流程需要将对象为null的属性赋值成控制符串,这样的话使用MessageFormat就不会将null显示出来,因为对象出现null的属性是不确定的,所以我就想用for循环遍历赋值,IDE生成foreach代码块更方便,于是就用了foreach,后面出错了才反应过来,foreach是直接把数组里面的元素的索引赋值给object对象,再把新的元素索引赋值给object跟数组元素没任何关系。


  在实际工作中,一定要弄清楚索引的概念,不然代码不会想咱们想的那样执行下去。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值