Integer :
Exemple 65. Plus grandes valeurs de la classe
Integer
public static final int MAX_VALUE = 0x7fffffff ; public static final int MIN_VALUE = 0x80000000 ;
byte dans la classe
Byte, pour les
short dans la classe
Short etc… Mis à part la division par zéro, il n’y a pas d’erreur générée pour les dépassements de capacités sur les opérations entières.
Exemple 66. Cas de la division par 0
int i = 0 ; int j = 9 ; int k = j / i ; // génère une java.lang.ArithmeticException
Float et
Double.
Exemple 67. Limites de codage des
Float et
Double
// Classe Float public static final int MIN_VALUE = 1.4E-45 ; public static final int MAX_VALUE = 3.4028235E38 ; // Classe Double public static final int MIN_VALUE = 4.9E-324 ; public static final int MAX_VALUE = 1.7976931348623157E308 ;
POSITIVE_INFINITY ou
NEGATIVE_INFINITY suivant qu’il est positif ou négatif respectivement. En particulier, la division par 0 ne génère pas d'erreur en flottant : elle donne un résultat qui est soit
POSITIVE_INFINITY soit
NEGATIVE_INFINITY.
Quand le résultat a une valeur indéfinie, il prend la valeur
NaN (
Not a Number
). Cela arrive dans quatre cas :
*_INFINITY à lui-même ;
*_INFINITY par lui-même ;
*_INFINITY par 0.
NaN a une particularité : elle n’est égale à rien, pas même à elle-même ! Pour savoir si le résultat d’une expression a la valeur
NaN, il ne faut donc pas tenter de la comparer à
NaN avec un naïf
==, mais utiliser la méthode
isNaN(), comme sur l’exemple suivant.
Exemple 69. Exemple de division par 0 en flottant
double p = 0.0 ; double q = 0.0 ; double r = p / q ; // pas d'erreur à l'exécution double t = p / q ; double u = r ; System.out.println("r = " + r) ; System.out.println("r == t : " + (r == t)) ; System.out.println("r == u : " + (r == u)) ;
> r = NaN > r == t : false > r == u : falseComme prévu, on constate que
NaN n'est égal à rien.
BigInteger et
BigDecimal qui permettent de travailler en entier et en flottant avec une précision arbitraire. Ces classes sont utilisées lorsque l'on veut faire des calculs sur des nombres de grande précision. La précision est en fait simulée par logiciel, ce qui fait que les calculs qui utilisent ces classes peuvent être très lents. Leur utilisation dans les cas courants est totalement déconseillée. Il existe en revanche certaines applications ou elles sont indispensables.
Les nombres de ce type sont des objets, réaliser des opérations dessus se fait donc de la façon suivante.
Exemple 70. Utilisation de
BigInteger
BigInteger i = new BigInteger("123") ; BigInteger j = new BigInteger("345") ; BigInteger k = i.add(j) ;
String
StringBuffer et
StringBuilder