为什么比较名字时不能用==,要用equals?
在基本类型中,“==”比较的是两者的值
在引用类型中,“==”比较的是两者的内存地址,及是否为同一个对象
equals比较两者的内存地址,及是否同一个对象,但在String类中自动重写,比较是两者的值是否相等
如果此处用“==”,比较的是内存地址,用equals比较的是两者的值,因此用equals
String类型中的equals方法是重写过的,并不是直接比对地址是否相同。
name为String类型,比较的时候自然需要使用equals,而“==”比对的话,String类型会有很多情况是无法正常比对的,因为“==”比对的是地址,而String类型的产生和赋值都有可能内容一致,但是为不同的对象。
java中的==和equals
对于基本数据类型==号只是比较值是否相同(因为基本数据类型都有自己的内存,不可能相等)
对于引用类型,==比较的是两个指向的虚地址是不是相同(在堆中的位置)
Equals在没有重写的前提下也是比较内存地址
String和Integer类中,因为重写了Equals,所以比较的是值
实际中可以自己重写equals方法来比较值
比较String类型的内容用equals,比较String类型的引用地址用==,除此之外没有重写的equals都是比较地址的,比较字符串是用equals 因为String类型的数据在栈中存放的是引用地址,string比较特殊,它内部处理不一样
“”==“” 比较的是地址是否相同,equals比较的是内容是否相同。