< -->

mardi 22 mars 2011

Le transtypage en JAVA

Le transtypage en java consiste à la conversion d’un type à un autre (si c’est possible)
C’est en fait une conversion explicite (dans la plupart des cas), ou forcé lorsqu'elle ne serait pas effectuée implicitement.



En utilisé ce principe dans les cas suivants :
  • si il risque d’y avoir perte d’information
Par exemple lorsqu’on fait l’affectation d’un entier long (64 bits) à un entier int (32 bits), ou d’un réel double (Virgule flottante double précision) vers un réel float. On force alors le type, indiquant ainsi à la machine Java qu’on est conscient du problème de risque de perte d’information. (Le premier variable peut contenir plus d'information que le second).

  • Si on veut prendre la partie entière d’un réel (ou double).

Par exemple si on utilise la méthode random() de la class Math cette fonction return par défaut un double entre 0 et 1,alors qu’on est besoin d’un int. Par exemple, dans ce cas on peut procède comme suite :

int a = (int) Math.random()*100 ; //on ne prend que la partie entière

En générale ,pour effectuer un transtypage, il suffit de mettre le type de données voulu entre parenthèses à gauche de n'importe quelle valeur.

Si vous avez compris l’exemples précèdent ,alors les affectations suivantes sont implicitement autorisées entre entiers et/ou réels ; on peut affecter un byte à un short, ou un float à un double

Autrement dit :

byte ou short --> int --> long --float --> double


Exemple :

int i=1 ;
float f=12 ;
double d=123 ;

f=i;//c est OK
d=f;//c est ok ausii
i=f;//ou i=d ;nn car le variable i est de type(int ) inférieur au variable f et d
i=(int ) f ; //la c est ok

Règle à suivre :
Lorsque les deux opérandes d’un opérateur ne sont pas du même type, celui qui est de type inférieur est converti dans le type de l’autre.


Autre exemple


int i=10;

long l=11;


float f=12;


double d=123;

//affectations implicitement autorisée
i=i+1;


f=f+i;


d=f+i;


d=f*3.5d;




//affectations nécessitant une conversion


i=(int) f;


f=(float)d;


l=(long)d;


i=(int)f+(int)l;


l=(long)(i*d);


//il y on a d autre cas, mais ce qu’il il faut tenir compte hiérarchie


// short >> int >> long >>> float >> double


//un int peut support un short/ un long peut support int et/ou long / …
}
}


Ce qui est bon en Java c’est permet de (transtyper) n'importe quel type primitif vers n'importe quel autre type primitif. (+ ou -, par ce que le type booléen pose un problème dans certain cas)


Il reste a dire que la somme (ou soustraction) de deux opérandes qui ne sont pas de même type le résultat est de type le plus supérieur.

  •  Transformer une valeur de type String en valeur numérique (ou inversement)
En java le type String n’est pas considéré comme un type primitive, c’est pour cela qu’il un problème lors de la conversion .le cas qu’on vas traiter dans la conversion de String vers un type numérique. C’est lorsque notre Sting ne contient pas des caractère(char) (exemple 78T676) c'est-à-dire uniquement des nombre. On aura besoin de cette conversion lorsqu’on va arriver au cours de (graphique) Awt et Swing. Ou bien tous simplement lorsqu’on fait entrer des valeurs en clavier, ces valeurs sont considère comme des String .


Maintenant, passant au code qui permet d’effectuer cette conversion :


Code convertir String à un int / float / double


String s="2011";


int i =Integer.parseInt(s);
float f=Float.parseFloat(s);
double d=Double.parseDouble(s);
long l=Long.parselong(s);

On a utilisé les Classes Integer et Float et Double et Long pour convertir le variable de type String "s", a des variables de type numérique.

Supposons, maintenant qu’on veut faire le contraire c'est-à-dire qu’on veut convertir un variable numérique à un String, là on a beaucoup de solution :


  • On utilise les Classes Integer, Float , Double ,Long qui redéfinissent la méthode toString() ;


Le code de conversion sera :
int i=2011;
long l=i;
float f=i;
double d=i;


String s1=Integer.toString(i);
Sting s2=Long.toString(l);
Sting s3=Float.toString(f);
String s4=Double.toString(d);

  •  On peut aussi utilisé la méthode valueOf() de la Classe String ,qui permet de rassemble la valeur de la variable numérique a convertir dans un variable de type String
Le code de conversion cette fois sera :

int i=2011;
long l=i;
float f=i;
double d=i;


String s1= s1.valueOf(i);
Sting s2= s2.valueOf(l);
Sting s3= s3.valueOf(f);
String s4= s4.valueOf(d);

Comme vous pouvez le voir les méthode toString() et valueOf(); peuvent prendre en paramètre des valeurs numérique de type int,double,float,long,et même des variable boolean , char et tableau de caractère .sans oublie Object.

  • la troisième façon c’est ma préféré, on n’utilise aucune méthode mais seulement une simple propriétés des String. sont code est le suivant :
int i=2011;
long l=i;
float f=i;
double d=i;

String s1= i+"";
Sting s2= l+"";
Sting s3= f+"";
String s4= d+"";



En attente de vos remarques vos commentaires

Advertiser