类的加载过程,Person person = new Person();为例进行说明
- 因为new用到了Person.class,所以会先找到Person.class文件,并加载到内存中。
- 执行该类中的static代码块,如果有的话,给Person.class类进行初始化。
- 在堆内存中开辟空间分配内存地址。
- 在堆内存中建立对象的特有属性,并进行默认初始化。
- 对属性进行显示初始化。
- 对对象进行构造代码块初始化。
- 对对象进行与之对应的构造函数进行初始化。
- 将内存地址赋给栈内存中的p变量
java中==和equals和hashCode的区别
- 基本数据类型中==比较的值相等
- 类的比较的内存地址,即是否是同一个对象,在不重写equals的情况下,同比较内存地址,原实现也为如String等也重写了equals方法
- hashCode也是Object类的一个方法。返回一个离散的int型整数,在集合类操作中使用,为了提高查询速度。(HashMap,HashSet等比较是否为同一个)
- 如果两个对象equals,Java运行时环境会认为他们的hashcode一定相等
- 如果两个对象buequals,他们的hashcode可能相等
- 如果两个对象hashcode相等,他们不一定equals
- 如果两个对象hashcode不相等,他们一定不equals