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

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

2015年02月03日 ⁄ 综合 ⁄ 共 855字 ⁄ 字号 评论关闭

    一般学习编程语言都是从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跟数组元素没任何关系。

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

抱歉!评论已关闭.