【Java源码分析】String 比较 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; }
先比较指针地址是否相同
在比较是否字符串
比较字符串数组长度是否相等
倒叙比较字符是否相等