== 运算符h2
- 如果判断基本类型,判断的是值是否相等
- 如果判断引用类型,判断的是地址是否相等,即判断是不是同一个对象
equals 方法h2
equals 是 Object 类中的方法,特点如下:
- 只能判断引用类型
- 默认判断的是地址是否相等,子类中往往重写该方法,用于判断内容是否相等
- Integer 类中重写的 equals 方法,判断的是值是否相等
- String 类中的 equals 方法判断的是字符串是否匹配(相等)
对比总结h2
| 比较方式 | 基本类型 | 引用类型 |
|---|---|---|
== | 比较值 | 比较地址 |
equals | 不适用 | 默认比较地址,可重写为比较内容 |
代码示例h2
public class EqualsDemo { public static void main(String[] args) { // 基本类型比较 int a = 10; int b = 10; System.out.println(a == b); // true,值相等
// 引用类型比较 String s1 = new String("hello"); String s2 = new String("hello"); System.out.println(s1 == s2); // false,地址不同 System.out.println(s1.equals(s2)); // true,内容相同
// Integer 比较 Integer i1 = new Integer(100); Integer i2 = new Integer(100); System.out.println(i1 == i2); // false,地址不同 System.out.println(i1.equals(i2)); // true,值相同 }}源码分析h2
String 类中重写的 equals 方法h3
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;}Integer 类中重写的 equals 方法h3
public boolean equals(Object obj) { if (obj instanceof Integer) { return value == ((Integer)obj).intValue(); } return false;}
评论