Double/Double

Résolu/Fermé
bibabobu Messages postés 12 Date d'inscription samedi 26 juillet 2008 Statut Membre Dernière intervention 25 juin 2010 - 20 juin 2010 à 23:29
bibabobu Messages postés 12 Date d'inscription samedi 26 juillet 2008 Statut Membre Dernière intervention 25 juin 2010 - 25 juin 2010 à 20:39
Bonjour,

Je me pose quelques questions sur la provenance des types primitifs et comment fonctionnent les wrappers classes Double, Integer...
En outre, j'aimerais que l'on m'explique pourquoi :
double d = new Double(12.2586); // est équivalent à double d = 12.2586;

car à partir de ma connaissance des objets, je comprends:
Double d=new Double(12.2586) mais pas double d=new Double(65465);


Merci d'avance pour les réponses!

A voir également:

4 réponses

Mahmah Messages postés 496 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 22 juin 2010 125
22 juin 2010 à 17:59
Bonjour,

Je ne suis pas forcement très connaisseur (surtout en java) mais voici mon opinion:

double d = new Double(12.2586);
n'est pas équivalent à
double d = 12.2586;

double d = 12.2586;
je pense que tout le monde voit...

double d = new Double(12.2586);
Ce code construit une instance la classe Double, puis il y a une sorte de cast implicite pour convertir le Double en double puis l'instance de Double est détruite car elle n'est référencée par aucune variable. (donc a priori beaucoup de code pour faire exactement la même chose qu'au dessus)

Apparemment c'est une "Unboxing conversion"

Je n'ai pas trouvé si le compilateur faisait effectivement cette conversion de manière implicite donc je ne peux être sûr à 100% que c'est bien elle qui est appliquée ici mais ça expliquerait assez bien ce qui se produit ici.

Bien à vous,
M.
1
bibabobu Messages postés 12 Date d'inscription samedi 26 juillet 2008 Statut Membre Dernière intervention 25 juin 2010 1
25 juin 2010 à 20:39
merci, c'est très clair.
bonne soirée.
0
loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 148
Modifié par loupius le 21/06/2010 à 00:13
Gare au lézard primitif (ne lui dîtes pas il ne sera pas ravi de ce qualificatif !) !!!
double d = new Double(12.2586); // est équivalent à double d = 12.2586;
Absolument pas, il y a une erreur, il faut écrire:
double* d = new double(12.2586);
Bonne réflexion.
0
bibabobu Messages postés 12 Date d'inscription samedi 26 juillet 2008 Statut Membre Dernière intervention 25 juin 2010 1
22 juin 2010 à 16:47
Bonne réflexion -> ah oui, tu m'étonnes.
D'après ma connaissance du C, le wildcard ou l'astérix (ou l'obélix pour ceux qui suivent) indique que la variable est de type pointeur sur double.
Cela dit, d'après ma connaissance en Java, je n'ai jamais encore vu une telle déclaration de variable.
Lorsque tu écris
double* d = new double(12.2586);

cela veut dire qu'il existe un constructeur double qui prendrait en paramètre un double. En plus, il n'existe pas de classe double mais seulement une classe Double.
Cependant, il existe des modifications suivant les versions de java et apparemment, après le java 1.4, la classe Double a changé.
Personnellement, je consulte l'API java 1.5.

Au fait, pourrais-tu m'expliquer très vite ton code?

Merci d'avance.
0
loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 148
23 juin 2010 à 01:22
Oublie ce que j'ai dit, car je croyais simplement que tu exposais un problème de C++. Une croyance née d'une imprécision dans la question;
Bonne soirée.
0
bibabobu Messages postés 12 Date d'inscription samedi 26 juillet 2008 Statut Membre Dernière intervention 25 juin 2010 1
25 juin 2010 à 20:27
I couldn't be more sorry. C'est la moindre des choses de préciser le langage.
Merci tout de même pour la réponse..
Bon W-E
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
23 juin 2010 à 01:13
Bonjour,

Attention Bibabobu, il s'agit d'astérisque et non d'astérix, bien que ce dernier existe ^^.
Sinon, n'oublie jamais de préciser le langage dont tu parles. Cela change beaucoup d'un langage à l'autre.
Bon j'imagine que tu parles de Java, du coup.
Je confirme les propos de Mahmah.

double d = new Double(12.2586); // est équivalent à double d = 12.2586;
Oui, c'est vrai à partir de J2SE 5.0. Normalement, il faudrait écrire :
Double wrap = new Double(12.2586);
double d = wrap.doubleValue();

C'est ce qu'on appelle l'unboxing. Il y a aussi l'autoboxing (c'est le contraire grosso modo). Cette opération est fait à la compilation (si >= J2SE 5.0).

Cdlt,
0
bibabobu Messages postés 12 Date d'inscription samedi 26 juillet 2008 Statut Membre Dernière intervention 25 juin 2010 1
25 juin 2010 à 20:38
Qué miseria! Astérisque biensûr! Merci de signaler l'erreur. En plus, je suis moi-même trop souvent exaspérée dvt les forums informatiques où je trouve des énormes erreurs d'orthographe.
Sinon, pour le langage, pourquoi ne l'ai-je donc pas précisé?!? Dieu merci, fiddy est encore là pour me corriger.

Cdlt
0