二维数组获得行的数量和列的数量
对于一个int[][] array = new int[5][10];
获得行数int rows = array.lenght;
获得列数int columns = array[0].length;
equals() 和 == 和 hashCode()区别和联系
1、equals()比较的是对象的内容是否相等,而==比较的是对象的引用是否不同。即==比较的是内存地址。
例如
1 | String a1 = "Hello World"; |
结果:
1 | a1 == a2: true |
a1 和 a2的值Hello World都是放在常量区中。所以对应的内存地址都一样。所以== 和equals都是true
a3 和 a4是两个对象,对象的内存地址不一样。但是里面的值是一样的。
2、equals()是如何比较的?
Object类中equals的源码源码如下
1 | public boolean equals(Object obj) { |
比较的是对象的引用地址
String类中重写了equals方法
1 | public boolean equals(Object anObject) { |
第一个部分判断引用是否相等。引用相等则对象是同一个,里面的值就一定相等。
如果是两个对象,则取出两个对象的值一个一个的比较是否相等。
3、关于hashCode()
http://coding-geek.com/how-does-a-hashmap-work-in-java/
hashCode() 函数返回的是一个函数的hash值。两个对象相等则hashCode一定相等。两个hashCode() 相等则两个对象不一定相等。
为什么要重写hashCode()函数。因为有些集合框架是基于对象的hash值的。例如hashMap。如果不重写对象使用的都是父类生成的hash值。这样冲突变多,对于存储不利。
没有重写hashCode函数在hashMap中放置可能如下图所示
如果重写了hashCode()
提高了访问的效率和存储的效率。