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

4
任务
Java 语法,  第 4 级课程 6
已锁定
两个数字中的最小值
所有搜索和排序算法均基于比较。如果愿意,你将能够很快处理这些操作。同时,我们建议从小处着手:编写程序以找到两个数字中的最小值。找到并显示该数字。如果这两个数字相同,则显示其中任一数字。
4
任务
Java 语法,  第 4 级课程 6
已锁定
四个数字中的最大值
查找最大值是一种 n 元运算(对 n 个数字执行的运算),该运算返回几个数字中的最大值。别担心。在 CodeGym 秘密中心,我们不需要这种定义。我们在此学习如何编写代码。在此任务中,你需要使用键盘输入四个数字。然后确定其中的最大值并在屏幕上显示它。

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

8
任务
Java 语法,  第 4 级课程 6
已锁定
对三个数字进行排序
“线性混沌”行星上居住着同形体。据信他们已经发明了排序算法。在他们的头脑中,一切都井井有条。他们只向至少知道 7 种排序算法的人签发行星签证。让我们向“线性混沌”星球迈进第一步:从键盘读取三个数字,按降序排列,然后在屏幕上显示这些数字。

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变量指向包含相同文本的不同对象。


4
任务
Java 语法,  第 4 级课程 6
已锁定
珍或珍?
珍是 X 公司的管理员,她学过如何驾驶宇宙飞船并已飞向另一个星球。X 公司的人真诚善良,只是有点心不在焉,他们把名字弄混了。因此,他们决定将新管理员也称为珍。我们来帮助 X 公司找到他们的珍:编写程序来检查输入的两个名字是否相同。