[关闭]
@TryLoveCatch 2021-04-07T12:39:17.000000Z 字数 2561 阅读 632

Java基础之基础类

java java基础


String相关

hashCode()原理

hashcode
如何重写hashCode算法
hashCode 方法及 equals 方法的规范

关于相应的哈希算法,一个简单的算法如下:

组合公式:result = 31 * result + c

比如,String 类的 hashCode 方法如下(JDK 1.8):

  1. public int hashCode() {
  2. int h = hash;
  3. if (h == 0 && value.length > 0) {
  4. char val[] = value;
  5. for (int i = 0; i < value.length; i++) {
  6. h = 31 * h + val[i];
  7. }
  8. hash = h;
  9. }
  10. return h;
  11. }

equals()实现

原则

除了遵循这三原则之外,还要遵循:

1、如果两个对象equals,Java运行时环境会认为他们的hashcode一定相等。
2、如果两个对象不equals,他们的hashcode有可能相等。
3、如果两个对象hashcode相等,他们不一定equals。
4、如果两个对象hashcode不相等,他们一定不equals。

string实现

value是一个char类型的数组,用于存放字符串中的每个字符
判断条件:

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

Object相关

深拷贝&浅拷贝

Java 浅拷贝和深拷贝的理解和实现方式

浅拷贝

实现方式

深拷贝

对于深拷贝来说,不仅要复制对象的所有基本数据类型的成员变量值,还要为所有引用数据类型的成员变量申请存储空间,并复制每个引用数据类型成员变量所引用的对象,直到该对象可达的所有对象。

实现方式
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注