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