> 文档中心 > 【Java源码分析】String 比较 equals

【Java源码分析】String 比较 equals


equals()

equals() 方法用于将字符串与指定的对象比较。

String 类中重写了 equals() 方法用于比较两个字符串的内容是否相等。

语法
public boolean equals(Object anObject)
参数
  • anObject – 与字符串进行比较的对象。
返回值

如果给定对象与字符串相等,则返回 true;否则返回 false。

实例
public class Test {    public static void main(String args[]) { String str1 = new String("hello"); String str2 = str1; String str3 = new String("hello"); boolean retVal; retVal = str1.equals(str2 ); System.out.println("返回值 = " + retVal ); retVal = str1.equals( str3 ); System.out.println("返回值 = " + retVal );    }}

以上程序执行结果为:

返回值 = true返回值 = true

使用 ==equals() 比较字符串。

String 中 == 比较引用地址是否相同,equals() 比较字符串的内容是否相同:

String s1 = "Hello";// String 直接创建String s2 = "Hello";// String 直接创建String s3 = s1;     // 相同引用String s4 = new String("Hello");  // String 对象创建String s5 = new String("Hello");  // String 对象创建 s1 == s1;  // true, 相同引用s1 == s2;  // true, s1 和 s2 都在常量池中,引用相同s1 == s3;  // true, s3 与 s1 引用相同s1 == s4;  // false, 不同引用地址s4 == s5;  // false, 堆中不同引用地址 s1.equals(s3);    // true, 相同内容s1.equals(s4);    // true, 相同内容s4.equals(s5);    // true, 相同内容
源码
 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;    }

先比较指针地址是否相同

在比较是否字符串

​ 比较字符串数组长度是否相等

​ 倒叙比较字符是否相等