== 的使用
- == 是运算符
- 可以使用在基本类型变量和引用类型变量中;
- 如果比较的是基本数据类型变量,比较两个变量保存的数据是否相等。(不一定类型要相同)
- 如果比较的是引用数据类型变量,比较两个对象的地址值是否相同,即两个引用是否指向一个对象实体;
equals()方法的使用
-
equals()是一个方法,而非运算符;
-
只适用于引用数据类型;
-
//Object类中equals()的定义: public boolean equals (Object obj){ return (this == obj); } //说明:Object类中定义的equals()和==的作用是相同的,比较两个对象的地址是否相同,即两个引用是否指向
-
像String、Date、File、包装类等都重写了Object类中的equals()方法,重写以后,比较的不是两个引用的地址是否相同,而是比较两个对象的“实体内容”是否相同,即两个引用是否指向同一个对象实体;
-
通常情况下,我们自定义的类如果使用的是equals()的话,也通常是比较两个对象的"实体内容" 是否相同。那么,我们需要对Object类中的equals()进行重写;
==和equals的区别
-
==既可以比较基本类型也可以比较引用类型,对于基本类型就是比较值,对于引用类型就是比较内存地址;
-
equals的话,它是属于java.lang.Object类里面的方法,如果该方法没有被重写过默认也是==;我们可以看到String等类的equals方法是被重写过的,而且String类在日常开发中用的比较多,久而久之,形成了equals是比较值的错误观点;
-
具体要看自定义类里面有没有重写Object的equals方法来判断;
-
通常情况下,重写equals方法,会比较类中的相应属性是否都相等;