正在加载...

Java 中的 equals

用 equals 比较 String 文本,让匹配的词打印 true。在 Yard.java 中写出 String a = "red"; 与 String b = "red";,然后打印 a.equals(b)。再加 String c = "blue"; 并打印 a.equals(c)。用 javac Yard.java 编译,再运行 java Yard。屏幕应先显示 true,再显示 false。第二个演示创建两个 new String("red") 对象,使 == 可打印 false,而 equals 仍打印 true。把 debugging 留给下一页——本课是内容匹配与对象身份的对照。

用 equals 匹配文本

polymorphism 页通过 Machine 类型变量运行不同的 horn 方法体。本页比较文本。打开 Yard.java。保持公共类名为 Yard。若残留的 Machine / Truck / Car 演示会淹没字符串主线,请删除它们,以及残留的 abstract 填充、路径演示和任何键盘 Scanner。程序不得等待输入。这些演示不需要 import 行。
在 Yard.main 内创建三个字符串:
String a = "red";
String b = "red";
String c = "blue";
打印比较:
System.out.println(a.equals(b));
System.out.println(a.equals(c));
方法 equals 查看字符。相同文本返回 true。不同文本返回 false。

Yard equals red and blue

java
public class Yard {
    public static void main(String[] args) {
        String a = "red";
        String b = "red";
        String c = "blue";
        System.out.println(a.equals(b));
        System.out.println(a.equals(c));
    }
}

在保存 Yard.java 的文件夹中运行 javac Yard.java。当圆括号、花括号与分号都匹配时,javac 不会写出自己的行。然后运行 java Yard——不要写成 java Yard.java。运行命令去掉 .java 结尾。文件中只保留一个公共类,使名称匹配 Yard。
屏幕先显示 true,再显示 false。把这次运行走一遍。Java 从 Yard.main 开始。a.equals(b) 比较 red 与 red 并打印 true。a.equals(c) 比较 red 与 blue 并打印 false。你在 a 上调用了方法,并把另一个字符串作为参数传入。
若你仍看到 polymorphism 文件留下的 tone / honk / beep,请切到 equals 教学文件并再次运行 java Yard。若打印的是字符串本身而不是 equals 结果,屏幕会显示 red 与 blue——把 a.equals(b) 包进 println,让 boolean 出现。
看着屏幕把规则说出来:equals 询问文本是否逐字符匹配。本页不要发明调试器窗口。debugging 留给下一课。

在 new String 上对照 == 与 equals

第二个程序用 new 创建两个独立的 String 对象。二者都保存文本 red。程序先打印 a == b,再打印 a.equals(b)。

Yard == false equals true

java
public class Yard {
    public static void main(String[] args) {
        String a = new String("red");
        String b = new String("red");
        System.out.println(a == b);
        System.out.println(a.equals(b));
    }
}

用 javac Yard.java 编译,再运行 java Yard。屏幕先显示 false,再显示 true。== 检查询问 a 与 b 是否是内存中完全同一个对象。两次 new String("red") 调用创建两个对象,所以 == 打印 false。equals 检查仍看字符,所以打印 true。
再读一遍 main 里的两行。第一行:用 == 看身份。第二行:用 equals 看内容。为本教学形状保留两行打印,让对照留在同一屏幕上。若只打印 ==,你会错过本页同样要教的内容匹配。
在没有 new 的入门字面量如 "red" 上,Java 可能复用同一个池化对象,因此 == 有时会碰巧看起来为 true。第二个演示故意使用 new String("red"),让身份检查明确保持 false,而内容保持 true。当你关心文本时,优先用 equals。
若附近仍有 polymorphism 演示,把它们当作历史保留。本课请运行 equals 教学文件,让屏幕显示 boolean,而不是 horn 词。若 javac 抱怨重复的公共类,只让 Yard 保持 public。

与 polymorphism 调用对照

在 polymorphism 页,一个方法名通过父类型变量运行不同方法体。在本页,一个方法名——equals——回答两个字符串是否保存相同文本,而 == 回答它们是否是同一个对象。你仍然编译 Yard.java 并运行 java Yard。新记号是 equals、boolean 的 true / false 打印,以及与 new String 的 == 对照。
若仍打开着 Machine t = new Truck() 文件,你会看到 horn 调用。切到 equals 文件,让 main 创建字符串并打印比较结果。把 debugging 工具演示留在本页之外。把键盘输入留在本页之外。

这给 debugging 留下什么

本页比较字符串内容,并说明为何 == 不是文本的默认正确选择。下一页展示 debugging:你通过仔细阅读屏幕与源码,找出程序为何行为异常。这里先留在 equals 与 ==。尚不要求完整的调试器 walkthrough。
当你之后调试错误分支时,失败的 equals 检查是常见原因。把本页当作那则相邻故事的比较半边。先把两个 Yard 演示做到 true / false 与 false / true 都顺手,再打开 debugging 课。

进入 debugging 之前

你可以在匹配的 red 文本上调用 a.equals(b) 并看到 true,再对 blue 看到 false。你可以创建两个 new String("red") 对象,看到 == 打印 false 而 equals 打印 true。对每个保留的演示依次编译 Yard.java 并运行 java Yard。内容匹配与对象身份保持分开。下一页是 debugging,你在那里把屏幕与源码并排找错。
保留三字符串的 equals 演示,做清晰的内容检查。保留 new String 演示,做清晰的 == 对照。把 debugging 文件留在本页之外。这三条习惯是继续前进前的检查点。当 equals 对匹配文本打印 true——且 == 对两个带该文本的新对象打印 false——本课完成任务,你已准备好进入下一主题 debugging。
再过一遍文件夹:一个公共 Yard、main 里的字符串比较、无键盘等待、无强制调试器。对你保持打开的演示再运行一次 javac Yard.java 与 java Yard。若屏幕仍打印你期望的 boolean,比较故事就扎实了,课程可在下一页进入 debugging。

🧠 测试您的知识

准备开始

测试您的知识

通过这个互动测验挑战自己,看看你对这个主题的理解程度如何

❓
6
问题
🎯
70%
及格要求
♾️
∞
时间
🔄
∞
尝试次数

📝 说明

  • 仔细阅读每个问题
  • 为每个问题选择最佳答案
  • 您可以随时重新参加测验
  • 您的进度将显示在顶部