Остерегайтесь ваших "предположений о равенстве". Например, с целыми числами:
Integer a = 69;
Integer b = 69;
System.out.println(a == b); // prints true
Integer c = 1000;
Integer d = 1000;
System.out.println(c == d); // prints false
Это связано с внутренней реализацией Integer, имеющей ранее существующие объекты для целых чисел для малых значений (я думаю, что от -127 до 128). Однако для больших целых чисел каждый раз будет создаваться отдельный объект Integer.
То же самое относится и к вашим строкам, буквенные строки в вашем исходном коде будут связаны компилятором с одним и тем же объектом ... он достаточно умен, чтобы сделать это. Однако, когда вы будете читать строку из файла или создавать / манипулировать какой-либо строкой во время выполнения, они больше не будут равны.
String a = "x";
String b = "x";
String c = new String("x");
System.out.println(a == b); // prints true
System.out.println(a == c); // prints false