我理解等于运算符比较对字符串的引用。因此,它将检查字符串是否引用相同的对象,而不是它们是否逐个字符。
作为学习搜索算法的第一步,我设置了以下程序,其中有一个名称数组,然后检查数组中是否出现某个名称。
第一种方法:
我声明并初始化名称数组。我要求用户输入一个名称来检查它是否出现在数组中。
这是我用过的代码 -
import java.util.Scanner;public class Strawman{ public static void main(String[] args){ System.out.println("Enter the name to search for:"); Scanner scanner = new Scanner(System.in); String key = scanner.nextLine(); String[] names = {"alice", "bob", "carlos", "carol", "craig", "dave", "erin", "eve", "frank", "mallory", "oscar", "peggy", "trent", "walter", "wendy"}; for (int i = 0; i < names.length; i++){ if (key == names[i]) { System.out.println("Index " + i + " has the name " + key); } } }}
以下屏幕截图显示了此程序的其中一个运行 -
正如预期的那样,因为我使用==运算符来比较字符串,所以即使它出现在初始数组中,也无法在数组中找到名称“oscar”。根据我对等于运算符如何比较字符串引用的理解,此输出是预期的。
但是,我不明白为什么程序似乎工作,如果不是要求用户输入,我声明要搜索为字符串的名称。
第二种方法:
要搜索的名称“oscar”已声明为字符串,而不是要求用户输入 -
public class Strawman2{ public static void main(String[] args){ String[] names = {"alice", "bob", "carol", "craig", "carlos", "dave", "eve", "fred", "greg", "gregory", "oscar", "peter"}; String key = "oscar"; for (int i = 0; i < names.length; i++){ if (names[i] == key){ System.out.println("Index " + i + " has name " + key); } } }}
现在,如果我运行程序,在阵列中找到名称“oscar” -
有人可以解释这两种情况的区别吗?
慕勒3428872
繁星点点滴滴
相关分类