long blogs

进一步有进一步惊喜


  • Home
  • Archive
  • Tags
  •  

© 2026 long

Theme Typography by Makito

Proudly published with Hexo

java基础

Posted at 2019-09-09 笔记 java 

二维数组获得行的数量和列的数量

对于一个int[][] array = new int[5][10];
获得行数int rows = array.lenght;
获得列数int columns = array[0].length;

equals() 和 == 和 hashCode()区别和联系

1、equals()比较的是对象的内容是否相等,而==比较的是对象的引用是否不同。即==比较的是内存地址。
例如

1
2
3
4
5
6
7
8
String a1 = "Hello World";
String a2 = "Hello World";
System.out.println("a1 == a2:\t" + (a1 == a2));
System.out.println("al equals a2:\t"+(a1.equals(a2)));
String a3 = new String("Hello World");
String a4 = new String("Hello World");
System.out.println("a3 == a4:\t"+(a3 == a4));
System.out.println("a3 equals a4:\t"+(a3.equals(a4)));

结果:

1
2
3
4
a1 == a2:	true
al equals a2: true
a3 == a4: false
a3 equals a4: true

a1 和 a2的值Hello World都是放在常量区中。所以对应的内存地址都一样。所以== 和equals都是true
a3 和 a4是两个对象,对象的内存地址不一样。但是里面的值是一样的。
2、equals()是如何比较的?
Object类中equals的源码源码如下

1
2
3
public boolean equals(Object obj) {
return (this == obj);
}

比较的是对象的引用地址
String类中重写了equals方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}

第一个部分判断引用是否相等。引用相等则对象是同一个,里面的值就一定相等。
如果是两个对象,则取出两个对象的值一个一个的比较是否相等。
3、关于hashCode()
http://coding-geek.com/how-does-a-hashmap-work-in-java/
hashCode() 函数返回的是一个函数的hash值。两个对象相等则hashCode一定相等。两个hashCode() 相等则两个对象不一定相等。
为什么要重写hashCode()函数。因为有些集合框架是基于对象的hash值的。例如hashMap。如果不重写对象使用的都是父类生成的hash值。这样冲突变多,对于存储不利。
没有重写hashCode函数在hashMap中放置可能如下图所示

如果重写了hashCode()

提高了访问的效率和存储的效率。

Share 

 Previous post: jvm相关 Next post: javaScanner输入数据 

© 2026 long

Theme Typography by Makito

Proudly published with Hexo