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 :

déclaration d'objet incorrecte


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Août 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Paramétreur de progiciels
    Secteur : Alimentation

    Informations forums :
    Inscription : Août 2019
    Messages : 2
    Par défaut déclaration d'objet incorrecte
    Bonjour,

    Je débute en Java.

    Je suis un cours où je vois l'expression suivante;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int i = new Integer(12);
    Je ne la comprends pas, à la limite je comprends Integer i = new Integer(12); mais celle du dessus, je n'y arrive pas. un objet dans un int primitif, c pas possible non ???

    Merci d'avance !

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Il existe deux mécanismes en Java, depuis la version 1.5 :

    1. l'auto-boxing (la traduction française, mise en boite automatique, n'est pas usitée, autant que je sâche)
      Il permet la conversion automatique de toute valeur de type primitif en une instance d'objet de classe équivalente. Ainsi un int peut être converti directement en instance de Integer :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      int i=0;
      Integer value1 = i; // auto boxing de i vers value1
      Integer value2 = new Integer(i); // sans auto boxing
    2. l'auto-unboxing
      C'est l'inverse : une conversion automatique d'une valeur de type objet vers le type primitif équivalent.
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      Integer i=new Integer(0);
      int value1 = i; // auto unboxing de i vers value1
      int value2 = i.intValue(); // sans auto boxing


    Cela permet de simplifier par exemple une initialisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Integer n = 42; // au lieu de new Integer(42)
    En revanche, il est absurde d'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int n = new Integer(42);
    Parce que
    1. ça complexifie l'écriture inutilement
    2. ça crée une instance de Integer inutilement (consommation de mémoire superflue, enfin ici pas exactement parce qu'il y a un cache pour les valeurs de 0 à 127, mais bon avec 1000, ça serait le cas), sans parler du code exécuté inutilement. Cependant il n'est pas impossible que le compilateur simplifie de lui-même l'expression pour obtenir exactement la même chose que int n=42;


    Mais cela est possible, ça compile et ça fait ce qu'on voudrait que ça fasse.

    Là où c'est vraiment utile c'est par exemple dans le passage de paramètre ou le retour de méthode.

    Une méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public void faire(int i) {/*...*/}
    pourra être appelée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    List<Integer> ...
    for(Integer i : list) { // à noter qu'on peut faire aussi for(int i : list), 
        faire(i);
    }
    Attention, cependant au retour de valeur, ou à l'affectation en générale : une référence de type Integer pouvant être nulle, alors qu'une variable de type primitif non, on peut avoir une erreur dans ce cas à l'exécution.

    Enfin, le choix du type objet pour autoboxer un primitif n'est pas déterminé par le type de la variable éventuellement affectée, ou celui du paramètre, mais bien par le type primitif.

    Ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public static void main(String[] args) {
    		Object a=42;
    		System.out.println(a.getClass());
    	}
    Affichera
    class java.lang.Integer
    
    Ou encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    	public static void main(String[] args) {
    		Number a=42; // par défaut un litéral sans virgule est un int
    		Number b=42L;
    		Number c=42.0; // par défaut un litéral sans virgule est un double
    		Number d=42f;
    		System.out.println("a " + a.getClass());
    		System.out.println("b " + b.getClass());
    		System.out.println("c " + c.getClass());
    		System.out.println("d " + d.getClass());
    	}
    Affichera
    a class java.lang.Integer
    b class java.lang.Long
    c class java.lang.Double
    d class java.lang.Float
    
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Nouveau candidat au Club
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Août 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Paramétreur de progiciels
    Secteur : Alimentation

    Informations forums :
    Inscription : Août 2019
    Messages : 2
    Par défaut déclaration variable objet suite
    Salut,

    Merci pour cette réponse complète et très intéressante.

    Je clos la discussion.

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

Discussions similaires

  1. Erreur d'exécution 3420 => objet incorrect ou non défini
    Par LeJay64 dans le forum VBA Access
    Réponses: 6
    Dernier message: 05/10/2007, 09h45
  2. Erreur ODBC => SQL serveur: nom d'objet incorrect
    Par lylyagloire dans le forum JDBC
    Réponses: 1
    Dernier message: 22/03/2007, 19h10
  3. pb de déclaration d'objet dans vba
    Par bbgprog dans le forum Access
    Réponses: 10
    Dernier message: 01/08/2006, 14h03
  4. [HIBERNATE] Chargement d'objet incorrect
    Par faya972 dans le forum Hibernate
    Réponses: 4
    Dernier message: 19/04/2006, 23h01
  5. [Convention]déclarations des objets
    Par allstar dans le forum Langage
    Réponses: 4
    Dernier message: 17/11/2005, 00h57

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