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 :

Chapitre 4 du mémo du certifier Java SE 6 : les principaux opérateurs du langage Java


Sujet :

Langage Java

  1. #1
    Membre éclairé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 200
    Points : 792
    Points
    792
    Par défaut Chapitre 4 du mémo du certifier Java SE 6 : les principaux opérateurs du langage Java
    Bonjour à tous

    Je viens par le présent message vous annoncer la publication de l'article Les principaux opérateurs du langage Java. Il a pour but de présenter les différents opérateurs offerts par Java SE 6 en prenant le soin d'élucider leur mode opératoire.

    À terme, l'ensemble des articles de cette suite devra permettre à tout développeur Java d'avoir sensiblement le même niveau de connaissance qu'un titulaire d'une certification Java SE 6.

    Je vous invite donc non seulement à prendre connaissance du contenu de cet article, mais aussi à laisser vos remarques sur la présente discussion afin de l'améliorer.

    Je vous souhaite une bonne lecture.
    Ingénieur Recherche et Développement en informatique à Sopra

    Page perso developpez : http://armel-ndjobo.developpez.com/
    Suivez moi sur twitter : ndjobo

  2. #2
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    petite erreur ici: "Pour les opérateurs &, ^, et |, les deux opérandes doivent être : soient de type numérique ...."
    (je ne parle pas de l'ortaugrafe)
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (mon excellent bouquin sur Java : https://eska-publishing.com/fr/livre...822407076.html)

  3. #3
    Membre éclairé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 200
    Points : 792
    Points
    792
    Par défaut
    S'il te plait, tu peux être plus explicite, je ne vois pas un problème qui ne soit pas une faute d'orthographe.
    Ingénieur Recherche et Développement en informatique à Sopra

    Page perso developpez : http://armel-ndjobo.developpez.com/
    Suivez moi sur twitter : ndjobo

  4. #4
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    une valeur flottante est une valeur numérique: tu peux utiliser ces opérateurs avec des flottants?
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (mon excellent bouquin sur Java : https://eska-publishing.com/fr/livre...822407076.html)

  5. #5
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    tant que j'y suis une autre inexactitude: l'opérateur ternaire "condition? val1: val2" n'est pas strictement équivalent à un "if/then/else"
    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        static String doit(int val) {
           return "int"  ;
        }
     
        static String doit(String st) {
           return "String"      ;
        }
    essaye maintenant de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     System.out.println(doit((args.length> 2? 3: "4.25")));
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (mon excellent bouquin sur Java : https://eska-publishing.com/fr/livre...822407076.html)

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2012
    Messages
    3 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 3 020
    Points : 16 092
    Points
    16 092
    Par défaut
    Salut,

    VIII-A. Corrigez les erreurs et trouvez le résultat >

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class Taille {
      public static void main(String []args) {
        Double t = 160.0;
        String sexe = "M";
        String s = (t<150)? (sexe == "M" ? "Petit" : "Grande"):
             (sexe == "F" ? "Petite" : "Grand");
        System.out.println(s);
      }
    }

    Comparer des String avec l'opérateur == ?

    A priori, ici, on veut juste comparer la valeur, et non les références. Donc on préfèrera surement utiliser la méthode equals() de la classe String.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    String sexe = "M";
        String s = sexe == new String("M") ? "Petite" : "Grand";
    Renvoie Grand...

  7. #7
    Modérateur
    Avatar de Gugelhupf
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Décembre 2011
    Messages
    1 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 320
    Points : 3 741
    Points
    3 741
    Billets dans le blog
    12
    Par défaut
    L'objet sexe est initialisé à partir de la syntaxe sucré, ce qui fait qu'il y aura une optimisation de la JVM pour que l'objet sexe utilise la même référence que toutes les autres chaines "M" du script en cours.

    Donc même si on n'utilise pas equals(), sexe == "M" devrait renvoyer true. Ça fait surement parti des pièges de ce test.
    N'hésitez pas à consulter la FAQ Java, lire les cours et tutoriels Java, et à poser vos questions sur les forums d'entraide Java

    Ma page Developpez | Mon profil Linkedin | Vous souhaitez me contacter ? Contacter Gokan EKINCI

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2012
    Messages
    3 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 3 020
    Points : 16 092
    Points
    16 092
    Par défaut
    Ben c'est propre à la JVM, pas au langage. Donc selon moi, et dans le cadre d'une certification sur le langage, c'est incorrect.

    On pourrait dire que "ça tombe en marche" parce que l'implémentation de le JVM est particulière, et que par conséquent, elle utilise la même instance pour les Strings. Sur une autre JVM, cela pourrait ne pas marcher parce que Java (le langage) ne spécifie rien à ce sujet.

    Je considère en outre qu'un article qui se veut éducatif (et qui y réussit très bien je trouve) ne devrait pas donner des méthodes qui peuvent ne pas marcher à tous les coups.

    Les comparaisons de String en java, c'est la méthode equals(). Les autres méthodes ne sont pas absolues.

  9. #9
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par Carhiboux Voir le message
    Ben c'est propre à la JVM, pas au langage.
    Java language specification, section 3.10.5. Une chaine literrale réfère toujours à la même instance de String. C'est donc bien propre au language.

    Moreover, a string literal always refers to the same instance of class String. This is because string literals - or, more generally, strings that are the values of constant expressions (§15.28) - are "interned" so as to share unique instances, using the method String.intern.
    Cet article est au contraire tout à fait correct. La comparaison avec des constantes se fait souvent avec == plutot que equals. C'est plus lisible. C'est n'est bien entendu valable que quand tu sais par design que tout viendra à partir de ces constantes. Si tu dois comparer des choses entrées par l'utilisateurs, lues depuis un fichier ou construites d'une autre manière, ce n'est plus valable.

    C'est donc finalement de moins en moins le cas puisqu'aujourd'hui, on a tendance à préférer un enum plutot qu'un série de constantes String

  10. #10
    Expert éminent sénior
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2012
    Messages
    3 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 3 020
    Points : 16 092
    Points
    16 092
    Par défaut
    Ha ben j'aurais appris quelque chose aujourd’hui

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/01/2014, 16h06

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