Строка не равна строке?

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!");

Почему Fk да! никогда не происходит, если я ввожу одну из букв A-L?

Ответ 1

Строки - это объекты. == сравнивает объекты по ссылке, а не по их внутреннему значению.

Существует 2 решения:

  • Используйте String#equals() вместо сравнения двух объектов String.

    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!");
    

Ответ 2

Чтобы сравнить строки для равенства, не используйте ==. Оператор == проверяет, являются ли два объекта точно одним и тем же объектом. Две строки могут быть разными объектами, но имеют одинаковое значение (в них одинаковые символы). Используйте метод .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>