0%

equals和hashCode

equals

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

默认使用==比较对象的引用,也就是说如果不去覆写,使用equals==效果是一样的。

hashCode

1
2
@HotSpotIntrinsicCandidate
public native int hashCode();

hashCode()是一个native方法,值由对象的存储地址计算得出(字符串类型的hash值根据字符串内容计算)。

为什么需要覆写equals和hashCode方法

两个方法的作用都是比较两个对象在逻辑上是否相等。equals可靠,而hashCode性能更强。

Object默认的equals和hashCode方法基本没什么用。

所以如果要做大量的对比,可以先用hashCode做第一步筛选,如果hashCode相同再用equals做出最后的判断。

  • 情景一:我有一个List,元素类型是Student(List),我想对List中的元素去重,可以使用List.stream().distinct()方法,但是需要告诉java怎么样的两个Student才能称之为equal。
  • 情景二:HashMap中添加自定义类型的key时,需要覆写equals和hashCode方法,原因要从HashMap的原理说起。

如何覆写equals和hashCode方法

equals方法判断相等,hashCode值必须相等。hashCode值相等,equals方法可以不想等。

所以hashCode相等是equals的必要不充分条件。

覆写equals时需要考虑自反性、对称性、传递性、一致性(离散数学里关系的性质)。

toString

System.out.println()时默认的方法,默认为”类名@hashCode”。

clone

1
2
@HotSpotIntrinsicCandidate
protected native Object clone() throws CloneNotSupportedException;

如果对象的类没有实现Cloneable接口,调用clone方法就会抛出CloneNotSupportedException。

功能介绍

该系统有三种类型的用户:

  • 管理员
  • 实验员
  • 学生

不同用户拥有不同的功能:

  • 管理员的功能主要有:实验课程管理(增删课程),实验课程安排(给某个的班级安排某个课程)
  • 实验员的功能:给自己负责的学生登入实验成绩
  • 学生的功能:课程查询(查看自己被安排了什么课),成绩查询(查询课程的成绩,如果未录入就查不到)

页面设计

主要设计了8个页面,展示一部分:

  1. /index:主页面
    Read more »

最初学习注解的时候,很多地方没弄明白,在对java本身和一些框架有了一些更深的认识之后,回过头再巩固一下。

定义

注解可以在编译、运行期间为编译器、JVM提供一些信息,目的是让程序借助这些信息完成一些特定功能

Read more »

网页图标

之前也弄过网页图标,把favicon.ico文件移到resources/static目录下就完了,原理是什么和spring怎么做的我一概不知,但发现有时候不好使,也不知道为啥。网上方法试了很多,终于找到了有用的方法。

Read more »