2017-10-13 3 views
0

J'essaie de détecter la valeur d'une chaîne en position 0 d'un tableau, mais malgré le fait de coller littéralement la valeur que je vérifie, elle ne détecte pas la similarité.Sélection à l'aide d'un tableau de chaînes (java)

public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { 
    // boolean method must return true or false 
    Player player = (Player) sender;  // casts the sender, from CommandSender, to class Player 
    String ref = sender.getName();   // string 'ref' refer's to the sender's name 
    boolean success = f;     // Stores if code is executed correctly 

    if(label.equalsIgnoreCase("blocks")) { // if command sent is '/blocks' 
     success = t;  // This code will work fine if args has no values 
     if (args.length == 0) { 

      some_code() 

     }else{ 
      getLogger().info(args[0].toString());  // for debugging/prints out the 
      String arg0 = args[0].toString(); 
      if(arg0 == "broken") { // This is the bit that wont work. when args[0] is 'broken' the if statement passes to the else claus 

            some_more_code() 

      }else if(arg0 == "placed") { 

       even_more_code()  
     }else { 
       getLogger().info("I failed to run"); // for debugging / it constantly prints this error message 
       success = f;} 

     } 

    } 

Pour le contexte, j'utilise les bibliothèques Bukkit. Lorsque la méthode onCommand est appelée, le tableau args [] lui est passé. J'ai littéralement copié-collé le "broken" et "placé" de mon code dans l'entrée qui passe les args [] à cette méthode, mais il renvoie toujours false.

Toute aide serait appréciée

+6

Copie possible de [Comment comparer les chaînes en Java?] (Https://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java) –

Répondre

2

Strings en Java sont des objets, et en les comparant à l'aide == donne la comparaison d'adresse, pas celui que vous attendez.

Utilisez plutôt .equals().

+0

Les sous-catalogues sont acceptés avec plaisir ** si suivi de commentaires constructifs **. – Neo

+0

Pourquoi le if (args.length == 0) fonctionne-t-il alors, si cela ne vous dérange pas de le demander? –

+1

en raison de 'args.length' retourne une primitive' int' et '0' est aussi une primitive' int' ... vous devriez continuer à utiliser 'equalsIgnoreCase' si vous souhaitez comparer les chaînes ... – assembler

0

== est l'opérateur "est le même paramètre donné la même référence", ce que vous voulez utiliser est la fonction .Equals() de la classe String. Suggestion: pour éviter tout problème d'incohérence entre vos chaînes codées en dur, utilisez une classe qui gère les arguments de chaîne possibles.