1.比较字符串

这一切都很好。但是你可以看到 thes1s2strings 实际上是相同的,这意味着它们包含相同的文本。比较字符串时,如何告诉程序不要看String对象的地址,而是看它们的内容?

为了帮助我们解决这个问题,Java 的String类有equals方法。调用它看起来像这样:

string1.equals(string2)
比较两个字符串

true如果字符串相同,则此方法返回,false如果它们不相同,则返回。

例子:

代码 笔记
String s1 = "Hello";
String s2 = "HELLO";
String s3 = s1.toUpperCase();

System.out.println(s1.equals(s2));
System.out.println(s1.equals(s3));
System.out.println(s2.equals(s3));
// Hello
// HELLO
// HELLO

false // They are different
false // They are different
true // They are the same, even though the addresses are different

更多示例:

代码 解释
"Hello".equals("HELLO")
false
String s = "Hello";
"Hello".equals(s);
true
String s = "Hel";
"Hello".equals(s + "lo");
true
String s = "H";
(s + "ello").equals(s + "ello");
true


2.不区分大小写的字符串比较

在上一个示例中,您看到比较结果为. 实际上,字符串不相等。但..."Hello".equals("HELLO")false

显然,字符串不相等。也就是说,它们的内容具有相同的字母,只是字母的大小写不同。有什么办法可以比较它们并忽略字母的大小写吗?也就是说,这样产量?"Hello".equals("HELLO")true

这个问题的答案是肯定的。在 Java 中,String类型还有一个特殊的方法:equalsIgnoreCase. 调用它看起来像这样:

string1.equalsIgnoreCase(string2)

该方法的名称大致翻译为比较但忽略大小写。方法名称中的字母包括两条竖线:第一条是小写字母L,第二条是大写字母i。不要让这让你感到困惑。

例子:

代码 笔记
String s1 = "Hello";
String s2 = "HELLO";
String s3 = s1.toUpperCase();

System.out.println(s1.equalsIgnoreCase(s2));
System.out.println(s1.equalsIgnoreCase(s3));
System.out.println(s2.equalsIgnoreCase(s3));  
// Hello
// HELLO
// HELLO

true
true
true


3.字符串比较示例

举一个简单的例子:假设你需要从键盘输入两行,并判断它们是否相同。这就是代码的样子:

Scanner console = new Scanner(System.in);
String a = console.nextLine();
String b = console.nextLine();
String result = a.equals(b) ? "Same" : "Different";
System.out.println(result);

4. 字符串比较的一个有趣的细微差别

您需要注意一个重要的细微差别。

如果Java 编译器在您的代码中(特别是在您的代码中)发现多个相同的字符串,那么它将只为它们创建一个对象以节省内存。

String text = "This is a very important message";
String message = "This is a very important message";

结果是内存将包含的内容:

字符串比较

如果你text == message在这里比较,那么你会得到true。所以不要对此感到惊讶。

如果出于某种原因你真的需要不同的引用,那么你可以这样写:

String text = "This is a very important message";
String message = new String ("This is a very important message");

或这个:

String text = "This is a very important message";
String message = new String (text);

在这两种情况下,textmessage变量指向包含相同文本的不同对象。