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

avec Java Discussion :

Polymorphisme Object - String


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Homme Profil pro
    Developpeur web
    Inscrit en
    Septembre 2006
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developpeur web
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 225
    Par défaut Polymorphisme Object - String
    Bonjour, je suis pour le moment entrain de débuter la programmation en Java à l'aide d'un livre comme il se doit et malgré mes relectures, je pense que ces commentaires (qui viennent du livre) sont incorrects :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Object o1, o2;
    String ch1 = "...", ch2 = "...";
    o1 = ch1; o2 = ch2;
    ...........
    o1.equals(o2) // utilise equals de object
    o1.equals(ch2) // utilise equals de object
    ch1.equals(o2) // utilise equals de string
    ch1.equals(ch2) // utilise equals de string
    Pour la première instruction par exemple, je déduis :
    - On regarde le type de o1 (Object) et on cherche la signature de la meilleure méthode (boolean equals(Object))
    - A l'exécution o1 référence un String et comme la classe String redéfinit la méthode equals identiquement (même signature), on utilise equals de String et non de Object.

    Impossible de trouver mon erreur en cherchant, j'ai même refais le test avec des classes que j'ai créer et j'arrive à ma conclusion...

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 380
    Par défaut
    Bonjour,

    Avec le code que tu décris, effectivement les 4 appels à equals() seront fait sur la classe String.

    Il n'y avait pas de code important au niveau des '...........'?

  3. #3
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par Oprichnik Voir le message
    Pour la première instruction par exemple, je déduis :
    Pour la première instruction par exemple, je déduis :
    - On regarde le type de o1 (Object) et on cherche la signature de la meilleure méthode (boolean equals(Object))
    - A l'exécution o1 référence un String et comme la classe String redéfinit la méthode equals identiquement (même signature), on utilise equals de String et non de Object.
    Ton analyse est tout à fait correct !


    En fait il faudrait savoir de quel coté on se place exactement, mais au final c'est toujours la méthode equals() de String qui sera exécutée...


    Je suppose que ton bouquin se place du point de vue du compilateur, car là on a bien des différences.

    Par exemple si on reste sur cette première instruction :
    • Le compilateur se base sur le code source et le type déclaré des variables. Ainsi comme o1 est de type Object, le compilateur génère un appel de méthode virtuelle (invokevirtual) vers Object.equals() de l'instance o1.
    • A l'exécution, la JVM va interpréter cet appel en vérifiant le type réel de o1. Puisqu'il s'agit du type String qui redéfini la méthode equals(), c'est cette dernière qui sera exécutée.


    a++

  4. #4
    Membre éclairé

    Homme Profil pro
    Developpeur web
    Inscrit en
    Septembre 2006
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developpeur web
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 225
    Par défaut
    Pour les ".....", c'est tel quel dans le livre.

    Je vais vous écrire exactement le paragraphe qui s'intitule /!\ Précautions du livre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Object o1, o2;
    String ch1 = "...", ch2 = "...";
    o1 = ch1; o2 = ch2;
    .....
    o1.equals(o2) // utilise equals de Object --> comparaison de références
    o1.equals(ch2) // utilise equals de Object --> comparaison de références
    ch1.equals(o2) // utilise equals de String --> comparaison de valeurs
    ch1.equals(ch2) // utilise equals de String --> comparaison de valeurs
    J'ai fait une photo pour vous montrer dans la globalité :
    http://www.casimages.com/img.php?i=0...2345922761.jpg

    Le livre ne précise pas que c'est juste à la compilation :s

    PS : Livre : Programmer en Java de Claude Delannoy

  5. #5
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Dans ce cas c'est clairement une erreur ! Quoi qu'il arrive dans tous les cas le commentaire des deux première ligne est incorrect !!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    o1.equals(o2) // utilise equals de Object --> comparaison de références
    o1.equals(ch2) // utilise equals de Object --> comparaison de références
    ch1.equals(o2) // utilise equals de String --> comparaison de valeurs
    ch1.equals(ch2) // utilise equals de String --> comparaison de valeurs
    Au final dans les 4 cas c'est la même méthode qui est exécutée : celle de la classe String (on a donc bien des comparaison de valeurs).

    Le code de la méthode equals() de Object n'est jamais exécuté !

    a++

  6. #6
    Membre éclairé

    Homme Profil pro
    Developpeur web
    Inscrit en
    Septembre 2006
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developpeur web
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 225
    Par défaut
    ok, merci, j'ai envoyé un e-mail à l'auteur pour voir ce qu'il en dit...

    C'est quand même pas super d'avoir une erreur dans un livre :s

  7. #7
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 380
    Par défaut
    OK,

    Si tu pouvais nous dire si l'auteur dit qu'il y a une erreur, et sinon, comment il justifie son exemple de code. Histoire de comprendre ce qu'il avait derrière la tête au moment de la rédaction du bouquin.

  8. #8
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Oprichnik Voir le message
    C'est quand même pas super d'avoir une erreur dans un livre :s
    Une erreur est si vite arrivée... et pas forcément facile à détecter même après plusieurs relectures !

    a++

Discussions similaires

  1. Probleme de conversion Object => String
    Par yo_haha dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 19/12/2011, 15h05
  2. creation object String, StringBuffer
    Par fantomas261 dans le forum Langage
    Réponses: 9
    Dernier message: 08/12/2009, 15h33
  3. [Resource] Comment réussir un Binding sur un object string vide ?
    Par ikeas dans le forum Windows Presentation Foundation
    Réponses: 10
    Dernier message: 02/10/2008, 12h56
  4. conversion de type Object -> String
    Par wiss20000 dans le forum Langage
    Réponses: 3
    Dernier message: 11/04/2007, 00h15
  5. [java.lang] Object/String --> compareTo() ou equals()
    Par wdionysos dans le forum Langage
    Réponses: 17
    Dernier message: 17/01/2006, 23h41

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