1.“==”、equals和hashCode有什么区别
(1) “==”运算符来比较两个变量的值是否相等。该运算符用于比较变量对应的内存中所存储的数值是否相同,要比较两个基本类型或两个引用变量是否相等,只能使用该运算符。
(2)equals是Object类提供的方法之一。在没有覆盖“equals(Object)”的情况下,与 ==没有区别。
(3)hashCode()方法是从Object类中继承出来的,用来鉴定两个对象是否相等。Object类中的hashCode()方法返回对象在内存中 地址转换为一个int值,如果没有重写hashCode(),任何对象的hashCode()方法是不相等的。
hashCode()和equals的联系与区别?
equals()是用户调用的,hashCode()一般用户不调用。
在覆盖equals()的同时覆盖hashCode()
2.String、StringBuffer、StringBuilder的区别
在Java中,有String,StringBuilder,StringBuffer三者。三者的区别主要是两个方面,即运行速度和线程安全这两个方面。
(1)运行速度:
StringBuilder>StringBuffer>String
String为字符串常量,而StringBuilder和StringBuffer均为字符串变量。即String一旦创建之后不可更改,但后两者的对象是变量,是可以更改的。因此String适合在需要被共享的场合中使用。
(2)线程安全:
StringBuilder(单线程)是线程不安全的,StringBuffer(多线程)是线程安全。如果一个Stringbuffer对象在字符串缓冲区中被多个线程使用,StringBuffer中很多方法带有同步关键字,所以保证线程是安全的。只是在单线程中使用字符串缓冲区,那么StringBuilder的效率会更高些。