9.6 字符串比较
你可能想用运算符 == 和 != 来比较两个字符串:
String name1 = "Alan Turing";String name2 = "Ada Lovelace";if (name1 == name2) { // 不对!System.out.println("The names are the same.");}
这些代码能够通过编译并运行,且在大多数情况下能得到正确的答案。但这并不是正确的,有时得到的答案也不对。这是因为运算符 == 通过比较引用来判断两个变量指向的是否为同一个对象。如果你让它比较两个包含相同字符的字符串,结果将为 false。
要比较字符串,正确的做法是像下面这样使用方法 equals:
if (name1.equals(name2)) {System.out.println("The names are the same.");}
这个示例对 name1 调用 equals,并将实参指定为 name2。如果两个字符串包含相同的字符,方法 equals 将返回 true,否则返回 false。
如果两个字符串不同,可用 compareTo 来确定按字母表顺序排列时哪个字符串在前:
int diff = name1.compareTo(name2);if (diff == 0) {System.out.println("The names are the same.");} else if (diff < 0) {System.out.println("name1 comes before name2.");} else if (diff > 0) {System.out.println("name2 comes before name1.");}
compareTo 的返回值为两个字符串中第一个不同的字符的差。如果两个字符串相等,则差为零;如果按字母表顺序排列时,第一个字符串(对其调用这个方法的字符串)在前,则差值为负,否则为正。
在前面的代码中,compareTo 返回 8,这是因为 "Ada" 的第二个字母比 "Alan" 的第二个字母靠前 8 个位置。
equals 和 compareTo 都区分大小写。因为大写字母排在小写字母前,所以 "Ada" 排在 "ada" 前。
