IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

[débutant] problème avec un "if"


Sujet :

Langage Java

  1. #1
    Membre éclairé Avatar de pingoui
    Homme Profil pro
    Activité professionnelle sans liens avec le developpement
    Inscrit en
    Juillet 2004
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Activité professionnelle sans liens avec le developpement
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2004
    Messages : 582
    Par défaut [débutant] problème avec un "if"
    Bonjour,

    Je suis en train de faire des essai avec un if mais j'ai cette erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Incompatible operand types canari and String
    Voici le code qui génére cette erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    import java.util.Iterator;
    public class ModifierBaseAnnee { 
     
           void editBaseAnnee() { 
     
       	   //lecture l'une année
           Annee lecture = Annee.lire(); 
           for(
        		Iterator ite=lecture.getAnnee().iterator();
        		ite.hasNext();
        	){ 
             canari unCanari = (canari) ite.next();
             if ( unCanari == "titi" )     // par ICI l'erreur
             unCanari.setNom("GrosMinet");
             }
        }
    }
    J'ai une class canari
    Dedans, je définie, le Nom, le sexe, et des numéros de bague,etc...
    Je ne sais pas si je dois faire un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( unCanari == getNom("titi") )
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( unCanari ==unCanari.getNom("titi") )
    ou je sais pas quoi

    Help please

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 14
    Par défaut
    Essaie plutôt avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( uncanari.getNom() == "titi" )
    Et puis matte un peu la doc sur la POO, il semble que tu sois un peu trop fonctionnel dans ta façon de voir les objets.

  3. #3
    Membre expérimenté
    Inscrit en
    Avril 2004
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 238
    Par défaut
    Tout depend sur quoi doit porter ton test d'egalité...
    Si effectivement tu veux savoir si le nom de ton canari est titi tu fais ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (unCanari.getNom().equals("titi"))
    En supposant que la methode getNom() te renvoie un String qui represente le nom de ton canari.

    Et pour info faut utiliser o1.equals(o2) plutot que o1 == o2

    Voila

  4. #4
    Membre émérite
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Par défaut
    Je voudrais pas paraître pointilleux, mais il vaut mieux:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ("titi".equals(unCanari.getNom()))
    Comme ça pas de nullpointer.

    Sinon petit rappel:

    - 'equals' pour comparer la valeur d'un objet --> similitude,

    - '==' pour comparer la référence d'un objet (en gros son adresse mémoire) ou la valeur d'un type natif (int, long...) --> identité.

    C'est pas que:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Et pour info faut utiliser o1.equals(o2) plutot que o1 == o2
    c'est que o1 == 02 renvoie true si et seulement si o1 et o2 ont les même adresses mémoire (donc objet identique), ce qui n'est pas vérifié dans la majorité des cas, même si ces 2 objets contiennent les même valeurs !!!

    Dans la majorité des cas unCanari.getNom() == "titi" renvoie false car la chaîne "titi" et unCanari.getNom() ne sont pas les mêmes références (même adresse mémoire)...

    a+

  5. #5
    Membre éclairé Avatar de pingoui
    Homme Profil pro
    Activité professionnelle sans liens avec le developpement
    Inscrit en
    Juillet 2004
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Activité professionnelle sans liens avec le developpement
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2004
    Messages : 582
    Par défaut
    Merci beaucoup... comme d'habitude, vous m'êtes très utile.....



    Grâce à vous, je viens de résoudre un problème que j'ai essayé de résoudre depuis un petit bout de temps....
    De plus, j'ai résolu mon problème de façon très simple !

    Merci beaucoup ....
    Il ne me reste plus qu'a voir si c'est mon code est correct... sans bug cachés

  6. #6
    Membre expérimenté Avatar de wace
    Inscrit en
    Septembre 2003
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 224
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( unCanari == "titi" )
    En java, ca ne fonctionne pas ce truc la ... parce que String est un objet et non un type primitif comme un int ou un long

    ie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int monint = 1;
    if ( monint == 0 )
    ca c'est correct mais on pourrait faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Integer monint = new Integer("1");
    if ( monint.equals(new Integer("0")) )
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Integer monint = new Integer("1");
    if ( monint.intValue() == 0)
    car la methode intValue() retourne un int

  7. #7
    Membre éclairé Avatar de pingoui
    Homme Profil pro
    Activité professionnelle sans liens avec le developpement
    Inscrit en
    Juillet 2004
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Activité professionnelle sans liens avec le developpement
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2004
    Messages : 582
    Par défaut
    pour ma culture

    pourquoi utiliser

    plutôt que :

  8. #8
    Membre émérite
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Par défaut
    Cf mon explication...

    Dans 99,99 % des cas o1 == 02 renvoie false même si o1 et o2 "contiennent" les même valeurs...

    C'est pas que:

    Et pour info faut utiliser o1.equals(o2) plutot que o1 == o2

    c'est que o1 == 02 renvoie true si et seulement si o1 et o2 ont les même adresses mémoire (donc objet identique), ce qui n'est pas vérifié dans la majorité des cas, même si ces 2 objets contiennent les même valeurs !!!

    Dans la majorité des cas unCanari.getNom() == "titi" renvoie false car la chaîne "titi" et unCanari.getNom() ne sont pas les mêmes références (même adresse mémoire)...

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 14
    Par défaut
    Excusez moi pour le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( uncanari.getNom() == "titi" )
    depuis que je fais du VB5, j'ai tendance à oublier quelques subtilités du java.

  10. #10
    Membre émérite
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Par défaut
    Essaie ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    String s1 = new String("toto");
    String s2 = new String("toto");
     
    System.out.println(s1 == s2);
    Là tu n'as pas les même références (résultat false), tu crées deux objets en mémoire (constructeur explicite).

    Par contre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    String s1 = "toto";
    String s2 = "toto";
     
    System.out.println(s1 == s2);
    Là tu as les même références (résultat true).
    Dans ce cas la JVM reprend la même String en mémoire, car elle conserve les String utilisées et les reprends dans un soucis d'optimisation (d'où le 99.99% ).

  11. #11
    Membre éclairé Avatar de pingoui
    Homme Profil pro
    Activité professionnelle sans liens avec le developpement
    Inscrit en
    Juillet 2004
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Activité professionnelle sans liens avec le developpement
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2004
    Messages : 582
    Par défaut
    sorry,

    je n'ai pas vu ton explication....autant pour moi

    Merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Problème avec Dev-Cpp 4.9.9.0
    Par P4Pi dans le forum Dev-C++
    Réponses: 7
    Dernier message: 16/01/2010, 16h48
  2. [débutant] problème avec le curseur (sablier)
    Par bat dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 01/12/2004, 08h26
  3. [débutant] Problèmes avec CRegKey
    Par Pedro dans le forum MFC
    Réponses: 4
    Dernier message: 10/11/2003, 15h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo