面试题:请解释字符串比较之中
==
和equals()
的区别?
==
:比较的是两个字符串内存地址的数值是否相等,属于数值比较;
equals()
:比较的是两个字符串的内容,属于内容比较。
以后进行字符串相等判断的时候都使用equals()。
基本数据类型:
==
对于基本数据类型,判断两个变量的值是否相等。
equals()
不能用于基本数据类型,只能用于类变量,对于基本数据类型要用其包装类。
引用数据类型(不包括String)
因为对象变量存储的是对象在内存中的路径,即内存地址。
用==
比较时,即使对象的值相等,但是他们的内存地址不同,==
的结果还是为false
。
故==
用于比较两个对象变量中存储的内存地址是否相等,而不是变量引用的对象是否相等
equals()
也是比较对象的内存地址(没有进行重写)
在没有重写equals方法的情况下,它们之间的比较还是基于他们在内存中的存放位置的地址值的,因为Object类的equals方法源码中也是用双等号
==
进行比较的,所以比较后的结果跟==
的结果相同。
总结
Object类中的equals
方法和==
是一样的,没有区别,而String类,Integer类等等一些类,是重写了equals方法,才使得equals
和==
不同,所以,当自己创建类时,自动继承了Object的equals方法,要想实现不同的等于比较(比如比较对象中的值相同),必须重写equals
方法。