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 :

valueOf(j).intValue() ou valueOf(j) ?


Sujet :

avec Java

  1. #1
    Membre éclairé

    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Septembre 2007
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2007
    Messages : 214
    Points : 816
    Points
    816
    Par défaut valueOf(j).intValue() ou valueOf(j) ?
    Bonjour,
    Je continue mon apprentissage... J'ai encore une question du type "quelle différence entre les codes?"
    :-)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int i=0;
    String j = new String();
    j = "10";
    i = Integer.valueOf(j).intValue()+5;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int ii=0;
    String jj = new String();
    jj = "10";
    ii = Integer.valueOf(jj)+5;
    Dans le premier code (celui conseillé par le tuto que je suis en train de lire), il y a un intValue() en plus. A quoi sert-il ?

    Merci
    Christophe
    Christophe
    Porteur du projet R++ https://rplusplus.com
    YouTubeur https://www.youtube.com/c/lesstatsmemepasmal

  2. #2
    Membre éclairé
    Avatar de maxusn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2012
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 174
    Points : 661
    Points
    661
    Par défaut
    Bonjour,

    créer un Integer, qui est une classe Wrapper

    le retourne un int à partir du Integer qui a été créé lors du source : http://docs.oracle.com/javase/6/docs...g/Integer.html

  3. #3
    Membre éclairé

    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Septembre 2007
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2007
    Messages : 214
    Points : 816
    Points
    816
    Par défaut
    Très clair, merci.
    Christophe
    Porteur du projet R++ https://rplusplus.com
    YouTubeur https://www.youtube.com/c/lesstatsmemepasmal

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Non, tu sais toujours pas à quoi sert le intValue(). Pas à grand-chose, parce que si tu le mets pas, le compilateur fait comme si tu l'avais mis. C'est une conversion implicite de Integer vers int.
    C'est le concept d'auto-outbox qui sort le int de son wrapper, automatiquement.

    À noter que la bonne ligne, c'est ni l'un ni l'autre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    i = Integer.parseInt(j) + 5;
    Aucune raison de passer par le wrapper Integer, si c'est pour le sortir du wrapper tout de suite après.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre régulier
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2008
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Mars 2008
    Messages : 80
    Points : 99
    Points
    99
    Par défaut
    A noter quand même que lors de comparaison de deux Integer (avec le ==) si tu n'utilise pas les intValue() tu risque d'avoir des mauvaise surprise

  6. #6
    Membre éclairé

    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Septembre 2007
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2007
    Messages : 214
    Points : 816
    Points
    816
    Par défaut
    Citation Envoyé par Peter p@n ! Voir le message
    A noter quand même que lors de comparaison de deux Integer (avec le ==) si tu n'utilise pas les intValue() tu risque d'avoir des mauvaise surprise
    Mais encore ? Quelle genre de surprise ?
    Christophe
    Porteur du projet R++ https://rplusplus.com
    YouTubeur https://www.youtube.com/c/lesstatsmemepasmal

  7. #7
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Integer i = new Integer(5);
    Integer j = new Integer(5);
    System.out.println(i == j);
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Integer i = 2456;
    Integer j = 2456;
    System.out.println(i == j);
    Pourquoi est-ce qu'on a false ? Parce que Integer est un type objet, et que l'opérateur == ne cherche pas à vérifier le contenu des objets, mais à vérifier si les deux variables pointent toutes les deux vers le même objet. Ce qui n'est pas le cas.

    == ne sert pas à comparer des valeurs d'objet. Il faut utiliser equals(). En l'occurrence, quand on a besoin de faire des comparaisons, le int est plus pratique. C'est un type de base, et l'opérateur == fait exactement ce qu'il a l'air de faire.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre régulier
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2008
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Mars 2008
    Messages : 80
    Points : 99
    Points
    99
    Par défaut
    Tu m'as devancé et parfaitement répondu.

  9. #9
    Membre éclairé

    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Septembre 2007
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2007
    Messages : 214
    Points : 816
    Points
    816
    Par défaut
    Donc :
    • Sur des pointeurs == vérifie qu'ils pointent sur la même chose ;
    • Sur des type primitifs, == vérifie que les contenus sont les mêmes
    • Dans tous les cas, equal vérifie que les contenus sont les mêmes.

    C'est ça ?

    Christophe
    Christophe
    Porteur du projet R++ https://rplusplus.com
    YouTubeur https://www.youtube.com/c/lesstatsmemepasmal

  10. #10
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par Christophe Genolini Voir le message
    Sur des pointeurs == vérifie qu'ils pointent sur la même chose ;
    Oui

    Citation Envoyé par Christophe Genolini Voir le message
    Sur des type primitifs, == vérifie que les contenus sont les mêmes
    Oui. De toute façon, sur des types primitifs, le même contenu ou la même chose, c'est pareil. 2 c'est 2. Si une variable vaut 2 et qu'une autre variable vaut 2, c'est le même 2, forcément.


    Citation Envoyé par Christophe Genolini Voir le message
    Dans tous les cas, equal vérifie que les contenus sont les mêmes.
    Non. equals() ne peut pas être utilisé sur des types primitifs. C'est une méthode, et les types primitifs n'ont pas de méthode.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Membre éprouvé Avatar de Momoth
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2013
    Messages : 318
    Points : 1 236
    Points
    1 236
    Par défaut
    Citation Envoyé par Christophe Genolini Voir le message
    [*]Sur des pointeurs == vérifie qu'ils pointent sur la même chose ;
    Bonjour,

    Par pointeur, tu entends Wrapper ? Si c'est le cas normalement oui, comme dit plus haut le "==" vérifie l'emplacement mémoire pointé.

    Edit : Oups autant pour moi Equals est appliquable sur les Wrapper uniquement et non leurs primitifs.

    -- Momoth --
    La Triforce du développement : Fainéantise, Curiosité et Imagination.

  12. #12
    Membre éclairé

    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Septembre 2007
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2007
    Messages : 214
    Points : 816
    Points
    816
    Par défaut
    Donc :

    • Sur des type primitifs, == vérifie que les contenus sont les mêmes
    • Sur des pointeurs == vérifie qu'ils pointent sur la même chose ;
    • Sur des pointeurs, equal vérifie que les contenus sont les mêmes.
    • equal n'existe pas sur les types primitifs

    C'est ça ?

    Christophe

    PS : Désolé, quand j'ai une réponse, de la "ré écrire" dans mes mots à moi, c'est juste pour vérifier que je comprends bien ce qui a été dit.
    Christophe
    Porteur du projet R++ https://rplusplus.com
    YouTubeur https://www.youtube.com/c/lesstatsmemepasmal

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 5
    Points : 12
    Points
    12
    Par défaut
    C'est ça oui.

    Par contre redéfinis la méthode equals dans tes classes (vu ton autre sujet je pense que tu l'as compris). Car sinon tu utilises la méthode equals de la classe Object :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public boolean equals(Object obj) {
            return (this == obj);
    }
    thelvin merci pour tes précisions sur ton premier message et pour le concept d'auto-outbox que je ne connaissais pas. Pour ceux qui veulent en savoir plus : Autoboxing

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

Discussions similaires

  1. Quel avantage du valueOf
    Par Invité(e) dans le forum Général Java
    Réponses: 2
    Dernier message: 07/02/2011, 14h13
  2. Float.Valueof et pourquoi pas de Parse
    Par azerty123450 dans le forum Langage
    Réponses: 1
    Dernier message: 29/09/2010, 18h32
  3. Différence d'utilisation entre parseXxx, valueOf et decode ?
    Par fonnet dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 30/12/2009, 09h49
  4. erreur PLS-00382 xpath.valueof
    Par sol-elodie dans le forum SQL
    Réponses: 4
    Dernier message: 12/11/2007, 22h05
  5. [enum] method valueOf non reconnue
    Par leminipouce dans le forum Langage
    Réponses: 2
    Dernier message: 29/10/2007, 17h55

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