字符串不等于字符串?

11
String[] letters  = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "L"};

Scanner inp = new Scanner(System.in);
String input = (inp.nextLine());
String[] cord = input.split("");

for(int x = 0; x < 10; x++)
    if(letters[x] == cord[1])
        System.out.println("Fk yeah!");

如果我输入A-L字母中的任意一个,为什么就不能出现 Fk yeah!


你确定 cord 只是一个字母而且没有空格吗? - user195488
可以是大小写的区别。 - Jody
是的,我确定100%。不,它们都是大写字母。 - good_evening
1
可能是Equals和==之间的区别是什么的重复问题。 - Michael Petrotta
你应该使用 compareTo 而不是 == - Suhail Gupta
2个回答

24

字符串是对象。用 == 比较的是对象的引用,而不是它们内部的值。

有两个解决方案:

  1. 使用 String#equals() 方法来比较两个 String 对象的值。

  2. if (letters[x].equals(cord[1]))
    
    使用char代替String。它是一个原始类型,所以==可以起作用。
    char[] letters  = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'L'};
    
    Scanner inp = new Scanner(System.in);
    String input = (inp.nextLine());
    char[] cord = input.toCharArray();
    
    for (int x = 0; x < 10; x++)
        if (letters[x] == cord[1])
            System.out.println("Fk yeah!");
    

5
哇,你有很多徽章。 - user195488
2
@代码:与Jon Skeet相比,这算不了什么。 - BalusC
恭喜你,无论如何都很棒 :) 我向您致敬。 - user195488
@BalusC - 在String#equals()中的#符号表示它是一个实例方法吗? - Paul Bellora
@Kublai:没什么特别的。我倾向于在书面文本中使用javadoc风格来引用类名/方法名(就像在javadocs中通常所做的那样)。 - BalusC

11

要比较字符串是否相等,不要使用 == 运算符。== 运算符检查两个对象是否完全相同。两个字符串可能是不同的对象,但具有相同的值(其中包含完全相同的字符)。使用 .equals() 方法来比较字符串是否相等。同样地,使用 .compareTo() 方法来测试不等比较。例如:

String s = "something", t = "maybe something else";
if (s == t)      // Legal, but usually WRONG.
if (s.equals(t)) // RIGHT
if (s > t)    // ILLEGAL
if (s.compareTo(t) > 0) // CORRECT>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接