黑马程序员--java高新技术--反射(二)

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流>-----

4、数组的反射

(1)具有相同维数和元素类型的数组属于同一个类型,即具有相同的Class实例对象。数组字节码的名字:有[和数组对应类型的缩写,如int[]数组的名称为:[I

(2)Array工具类用于完成对数组的反射操作。

       Array.getLength(Object obj);//获取数组的长度

       Array.get(Object obj,int x);//获取数组中的元素

(3)如何得到某个数组中的某个元素的类型,

       例如:

              inta = new int[3];Object[]obj=new Object[]{”ABC”,1};

        无法得到某个数组的具体类型,只能得到其中某个元素的类型,

       例如:

               Obj[0].getClass().getName()得到的是java.lang.String。

(4)Object[]与String[]没有父子关系,Object与String有父子关系,所以newObject[]{“aaa”,”bb”}不能强制转换成newString[]{“aaa”,”bb”};Object x =“abc”能强制转换成Stringx =“abc”。

(5)基本类型的一维数组可以被当作Object类型使用,不能当作Object[]类型使用;非基本类型的一维数组,既可以当做Object类型使用,又可以当做Object[]类型使用。

 


5、HashCode的分析

 覆写hashCode()方法的意义:只有存入的是具有hashCode算法的集合的,覆写hashCode()方法才有价值。

(1)如果没有复写hashCode方法,对象的hashCode值是按照内存地址进行计算的。这样即使两个对象的内容是想等的,但是存入集合中的内存地址值不同,导致hashCode值也不同,被存入的区域也不同。所以两个内容相等的对象,就可以存入集合中。

(2)在重写父类方法equals()时,也重写hashcode方法,是相等的两个对象获取的hashcode也相等,这样当此对象做Map类中的Key时,两个equals为true的对象获取的value都是同一个,比较符合实际。

       所以就有这样的说法:如果两个对象equals相等的话,你应该让他们的hashCode也相等。如果对象存入的不是根据hash算法的集合中,就不需要复写hashCode方法。

(3)当一个对象存储进HashSet集合中以后,就不能修改这个对象中的那些参与计算哈希值的字段了,否则对象修改后的哈希值与最初存储进HashSet集合中的哈希值就不同了。在这种情况下,调用contains方法或者remove方法来寻找或者删除这个对象的引用,就会找不到这个对象。从而导致无法从HashSet集合中单独删除当前对象,从而造成内存泄露。(程序中某一些对象不再被使用,以为被删掉了,但是没有,还一直在占用内存中,当这样的对象慢慢增加时,就会造成内存泄露。) 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值