2

Estoy aprendiendo Java, intenté hacer algo simple(La secuencia Fibonacci).
Resulta que al intentar comparar una string con == o != no funciona.
Hice un código aparte para ver si mi hipótesis era cierta, y resulta que tengo la razón.
¿Alguien sabe porqué sucede esto?

import java.util.Scanner;

public class main{
    public static void main(String arg[]){
        String Tecla;
        Scanner cin = new Scanner(System.in);
        Tecla = cin.nextLine();
        if(Tecla == "c"){
            System.out.println("Es [c]");
        }
    }
}
// No importa la tecla que de, no entra al if
Mauricio
  • 324
  • 1
  • 7
  • Tu pregunta está duplicada y puedes encontrar una respuesta completa en este enlace: [¿Cómo comparar correctamente Strings (y objetos) en Java?](https://es.stackoverflow.com/questions/225/c%C3%B3mo-comparar-correctamente-strings-y-objetos-en-java). Me gustó mucho la respuesta de Carlos Lucero, explica como funciona todo. – MrDave1999 Apr 25 '20 at 20:22
  • Una respuesta corta de parte mía: La condición **siempre** dará `false` y esto se debe porque estás comparando direcciones de memoria. Ya que la variable `tecla` apunta hacia una dirección base de un objeto y la cadena `"c"` en realidad crea un objeto y por ende, se compara otra dirección base con lo que tenga `tecla`. En **conclusión:** Son direcciones de memoria diferentes, por eso da `false`. – MrDave1999 Apr 25 '20 at 20:25
  • 1
    Oh, ahora entiendo el porque. Busque una pregunta similar a la mia, pero no encontré ninguna. Ahora veo que si está duplicada, gracias – Mauricio Apr 25 '20 at 20:29

1 Answers1

0

Pruba eso o prueba con equals.Los String nunca se comparan con == import java.util.Scanner;

public class main{
    public static void main(String arg[]){
        String Tecla;
        Scanner cin = new Scanner(System.in);
        Tecla = cin.nextLine();
        if(Tecla.compareToIgnoreCase("c")==0){
            System.out.println("Es [c]");
        }
    }
}
unknow
  • 1,896
  • 9
  • 35