Start with very simple idea
<1> equals与==的区别
1. ==是一个运算符 equals是Object类的方法区别
2. 比较时的区别用于
基本类型的变量比较时: ==用于比较值是否相等,equals不能直接用于基本数据类型的比较,需要转换为其对应的包装类型。
用于引用类型的比较时: ==和equals都是比较栈内存中的地址是否相等 。相等为true 否则为false。但是通常会重写equals方法去实现对象内容的比较。
<2> Object.equals()
The default implementation of the equals() method in the Object class compares the references of the two objects to see if they are the same object in memory.
<3> hashCode
hashCode() 有什么用 与 a.equals(b) 有什么关系?简介: hashCode() 方法是相应对象整型的 hash 值。它常用于基于 hash 的集合类,如 Hashtable、HashMap、LinkedHashMap等等。它与 equals() 方法关系特别紧密。 根据 Java 规范,两个使用 equals() 方法来判断相等的对象,必须具有相同的 hash code。
除了传统的手动写hashCode, 还可以用Objects.hash(Object...)
<4> Comparator 与 Comparable 有什么不同
Comparable 接口用于定义对象的自然顺序,而 comparator 通常用于定义用户定制的顺序。
Comparable 总是只有一个,但是可以有多个 comparator 来定义对象的顺序
<5> Object有哪些公用方法
clone equals hashcode wait notify notifyall finalize toString getClass 除了clone和finalize其他均为公共方法。11个方法,wait被重载了两次
<6> 关于finally
finally不管有没有异常都要处理当try和catch中有return时,finally仍然会执行,finally比return先执行不管有木有异常抛出, finally在return返回前执行
finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,仍然是之前保存的值),
所以函数返回值是在finally执行前确定的注意: finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值finally不执行的几种情况: 程序提前终止如调用了System.exit, 病毒,断电
<7> 序列化
声明为static和transient类型的数据不能被序列化, 反序列化需要一个无参构造函数
<8> Java 中,Serializable 与 Externalizable 的区别
Serializable 接口是一个序列化 Java 类的接口,以便于它们可以在网络上传输或者可以将它们的状态保存在磁盘上,是 JVM 内嵌的默认序列化方式,成本高、脆弱而且不安全。Externalizable 允许你控制整个序列化过程,指定特定的二进制格式,增加安全机制。
<9> Java 中的拷贝
浅拷贝
拷贝对象和原始对象的引用类型引用同一个对象
深拷贝
拷贝对象和原始对象的引用类型引用不同对象
clone() 的替代方案使用 clone() 方法来拷贝一个对象即复杂又有风险,它会抛出异常,并且还需要类型转换。
Effective Java 书上讲到,最好不要去使用 c
这份面试笔记包括了:Java面试、Spring、JVM、MyBatis、Redis、MySQL、并发编程、微服务、Linux、Springboot、SpringCloud、MQ、Kafka 面试专题
需要全套面试笔记的【点击此处即可】即可免费获取
lone(),可以使用拷贝构造函数或者拷贝工厂来拷贝一个对象
<10> Java 中的static
1. 静态变量
静态变量: 又称为类变量,也就是说这个变量属于类的,类所有的实例都共享静态变量,可以直接通过类名来访问它;静态变量在内存中只存在一份。实例变量: 每创建一个实例就会产生一个实例变量,它与该实例同生共死
2. 静态方法 静态方法在类加载的时候就存在了,它不依赖于任何实例。所以静态方法必须有实现,也就是说它不能是抽象方法(abstract)。
3. 静态语句块 静态语句块在类初始化时运行一次。
存在继承的情况下,初始化顺序为:
父类(静态变量、静态语句块)
子类(静态变量、静态语句块)
父类(实例变量、普通语句块)
父类(构造函数)
子类(实例变量、普通语句块)
子类(构造函数)