Java do while-Schleife, die das Testen von Strings anders macht

Ich bin sehr verwirrt über das Verhalten bei der Verwendung von || Operator für die Funktion .equals. Gibt es einen Grund, warum ich es nicht für Saiten oder ähnliches verwenden kann?

das funktioniert

do{
  System.out.println("Play again? [Y/N]");
  //input: Y      
  play = in.nextLine();
  play = play.toUpperCase();

}
while(!"Y".equals(input) ); //breaks out of loop (as it should)

Warum funktioniert das nicht?!

do{
  System.out.println("Play again? [Y/N]");
  //input: Y      
  play = in.nextLine();
  play = play.toUpperCase();

}
while( !"Y".equals(input) || !"N".equals(input) ); //infinite loop

Antworten auf die Frage(6)

Ihre Antwort auf die Frage