==和equals区别
使用==比较
- 基本类型:比较
值
是否相等; - 引用类型:比较
内存地址值
是否相等。每新new
一个引用类型的对象,会重新分配堆内存空间,使用==
比较返回false
。
使用equals比较
引用类型:
- 默认情况下,比较内存地址值是否相等。
equals
方法是Object
类的一个方法,Java当中所有的类都是继承于Object这个超类:public class Object { public boolean equals(Object obj) { return (this == obj); } }
- 可以按照需求逻辑,重写对象的equals方法。
比较不同String类型对象内容是否相同
,应该用equals()
。
在实际使用中,一般会重写equals
方法,如java.lang.String
类的equals
源码如下:private final char value[]; public final class String { public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String) anObject; int n = value.length; if (n == anotherString.value.length) { char v1[] = value; char v2[] = anotherString.value; int i = 0; while (n-- != 0) { if (v1[i] != v2[i]) return false; i++; } return true; } } return false; } }
- 首先会判断要比较的两个字符串它们的
引用是否相等
。如果引用相等的话,直接返回true,不相等的话继续下面的判断; - 然后再判断
被比较的对象是否是String的实例
,如果不是的话直接返回false; - 如果是的话,再
比较两个字符串的长度是否相等
,如果长度不相等的话也就没有比较的必要了; - 长度如果相同,会比较字符串中的
每个字符是否相等
,一旦有一个字符不相等,就会直接返回false。
- 首先会判断要比较的两个字符串它们的