字符串作为对象如对其进行比较不能简单的使用比较运算符“==”,因为比较运算符比较的是两个字符串的地址是否相同。即使两个字符串的内容相同,但两个对象的内存地址是不同的。使用比较运算符仍然会返回false。
例
使用比较运算符比较两个字符串,实例代码如下:
String tom = new String("I am a student");
String jerry = new String("I am a student");
boolean b = (tom == jerry);
此时布尔型变量b的值为false,因为字符串是对象,tom、jerry是引用,内存示意图如图1所示。
图1 内存示意图
因此要比较两个字符串内容是否相等,应使用equals()方法和equalsIgnoreCase()方法。
l equals()方法
如果两个字符串具有相同的字符和长度,则使用equals()方法进行比较时,则返回true。
语法:
str.equals(String otherstr)
str、otherstr:参加比较的两个字符串对象。
l equalsIgnoreCase()方法
使用equals()方法对字符串进行比较时,是区分大小写的。而使用equalsIgnoreCase()方法是在忽略了大小写的情况下比较两个字符串是否相等。返回结果仍为boolean类型。
语法:
str.equalsIgnoreCase(String otherstr)
str、otherstr:参加比较的两个字符串对象。
通过下面的例子可以看出equals()方法和equalsIgnoreCase()方法的区别。
例 在项目中创建类Opinion,在主方法中创建String型变量,实现判断两个字符串是否相等,并将结果输出。
public class Opinion { //创建类
public static void main(String args[]) { //主方法
String s1 = new String("abc"); //创建字符串对象s1
String s2 = new String("ABC"); //创建字符串对象s2
String s3 = new String("abc"); //创建字符串对象s3
boolean b = s1.equals(s2); //使用equals()方法比较s1与s2
boolean b2 = s1.equalsIgnoreCase(s3); //使用equalsIgnoreCase()方法比较s1与s2
System.out.println(s1 + " equals " + s2 + " :" + b); //输出信息
System.out.println(s1 + " equalsIgnoreCase " + s2 + " :" + b2);
}
}
运行结果如图2所示。
图2 运行结果