Java中==和equals的区别
- 默认的equals,也就是Object类的equals就是用 == 实现的。
- 区别
(1)==可以用于基本类型或者对象。
(2)equals只能用于对象,默认情况下比较栈中的对象地址。 - 深入解析
(1)说不同,主要是有些常用类,如String和Integer类的equals被重写了来比较值,具体得看每个类的重写方式。
String类重写加入了比较字符串相等的部分
Integer类重写也加入了比数值的代码
(2)还有一个重点,一些基本类型的包装类,为了节省空间,有常量池设计。直接赋值的话会出现几个引用指向常量池中同一个对象,也就是栈中存放的几个同值对象指向常量池中同一个对象,即地址相同。如Integer中-127到128,直接赋值,指向的都是同一个对象,用new才会创建新的对象。当然这也不用担心数据混乱,jvm处理的很好。
图中a,b就是指向常量池中的同一个对象