| précédent | sommaire | accueil | suivant |
EXEMPLE 1 :
1. public class Variables21
2. {
3.
4. public static void main (String [] args)
5. {
6. byte age = 40;
7. age = 41;
8. System.out.println("age = " + age);
9. }
10.
11. }
Compilez puis exécutez. Il sera affiché : age = 41
La déclaration d' une variable réserve en mémoire un espace. L' affectation d' une valeur à cette variable entraîne le remplissage de cet espace
mémoire par la valeur.
C' est ce qui se passe ligne 6. un espace mémoire appelé age et ayant la forme de type byte est créé. Puis la valeur 40 y entre. Puis à la ligne 7,
on affecte une nouvelle valeur 41 à la variable. A ce moment, la valeur 41 entre dans cet espace mémoire, chassant dans le même temps la valeur
40. La nouvelle valeur de la variable est alors 41. C' est pourquoi il s' affiche age = 41
EXEMPLE 2 :
1. public class Variables22
2. {
3.
4. public static void main (String [] args)
5. {
6. byte age = 40;
7. age = 41;
8. System.out.println("age = " + age);
9. age = 35;
10. System.out.println("age = " + age);
11. age = 98;
12. System.out.println("age = " + age);
13. }
14.
15. }
Compilez puis exécutez. Il sera affiché :
age = 41
age = 35
age = 98
Vous l' aurez compris, la nouvelle valeur affectée à la variable, prend la place de l' ancienne valeur.
EXEMPLE 3 :
1. public class Variables23
2. {
3.
4. public static void main (String [] args)
5. {
6. byte age = 40;
7. byte age = 41;
8. System.out.println("age = " + age);
9. }
10.
11. }
Compilez ce programme et un message d' erreur sera affiché : age is already defined in main()
byte age = 41;
Ce qui veut dire que dans la classe VariablesII.java et à la ligne 7, la variable age a déjà été définie.
En effet, en java, comme en tout langage de programmation, on définit pas une même variable plus d' une fois.
EXEMPLE 4 :
1. public class Variables24
2. {
3.
4. public static void main (String [] args)
5. {
6. byte age1 = 40;
7. byte age2 = age1;
8. System.out.println("age2 = " + age2);
9. }
10.
11. }
Compilez ce programme puis exécutez. Il sera affiché : age2 = 40
Ligne 6 : déclaration de la variable age 1 de type byte, puis affectation de la valeur 40 à cette variable.
Ligne 7 : déclaration de la variable age 2 de type byte, puis affectation de la valeur de la variable age1 à la variable age2
De manière générale, en Java comme en tout langage, lorsqu' on a l' instruction variable1 = variable2; ça veut dire que la valeur de la variable
de droite est affectée à la variable de gauche.
EXEMPLE 5 :
1. public class Variables25
2. {
3.
4. public static void main (String [] args)
5. {
6. byte age1 = 40;
7. byte age2 = 33;
8. byte age3 = age1 + age2;
9. System.out.println("age3 = " + age3);
10.
11. }
12.
13. }
Compilez ce programme, il sera affiché une erreur possible loss of precision
found int required byte
byte age3 = age1 + age2;
Qu' est-ce que ça veut dire ? ... une possible perte de précision
une valeur de type int a été trouvée alors que la variable dans laquelle
on essaye de la mettre est de type byte. Vous allez me dire que 40 + 33 reste une valeur de type byte. C' est vrai. Mais considère que l' addition
de 2 byte donne un int. Allez donc savoir pourquoi. Pour ma part, je ne comprends pas non plus. Mais c' est comme ça.
Ceci reste encore vrai pour les autres opérations arithmétiques (soustraction, multiplication et division). De même, si vous écrivez
l' instruction : age + 1, la résultat est de type int. Aussi vrai si age était de type short. C' est pourquoi, lorsqu' on manipule des variables
de type entier(byte, short, int et long), il vaut mieux choisir le type int. Ce que nous allons faire pour la suite des opérations.
EXEMPLE 6 :
1. public class Variables26
2. {
3.
4. public static void main (String [] args)
5. {
6. int age1 = 40;
7. int age2 = 33;
8. int age3 = age1 + age2;
9. System.out.println("age3 = " + age3);
10.
11. }
12.
13. }
Compilez puis exécutez, il sera affiché : age3 = 73
Cette fois, la somme de 2 bytes est bien mise dans un int. Pas de message d' erreur. Java effectue la somme de la valeur de age1 avec celle de age2.
Puis Java met le résultat dans la variable age3.
De manière générale, lorsque Java rencontre l' instruction variable = opération entre des variables , il effectue d' abord l' opération.
Puis le résultat est affecté à la variable à gauche du signe égal. Parce que à gauche du signe égal, c' est l' espace mémoire alors qu ' à droite,
c' est le contenu, la valeur.
EXEMPLE 7 :
1. public class Variables27
2. {
3.
4. public static void main (String [] args)
5. {
6. int marches = 124;
7. marches = marches + 1;
8.
9. System.out.println("marches = " + marches);
10.
11. }
12.
13. }
Compilez puis exécutez, il sera affiché : marches = 125
La ligne 7 peut étonner au premier abord si vous réfléchissez en tant que mathématicien. Mais si vous réfléchissez à ce que j' ai déjà dit, vous
comprendrez que marches à gauche du signe égalest l' espace mémoire alors que marches à droite du signe égal est la valeur de ce même espace
mémoire. Autrement dit, la ligne 7 veut dire qu' on prend la valeur de la variable marches, on l' additionne avec le nombre 1. Puis on met le
résultat dans cet espace mémoire que représente la variable marches.
EXEMPLE 8 :
1. public class Variables28
2. {
3.
4. public static void main (String [] args)
5. {
6. int marches = 124;
7. marches++;
8. System.out.println("marches = " + marches);
9. System.out.println();
10. marches += 1;
11. System.out.println("marches = " + marches);
12. }
13.
14. }
Compilez puis exécutez, il sera affiché :
marches = 125
marches = 126
ligne 6 : déclaration, puis affectation de la variable marches de la valeur 124. puis la ligne 7 représente ce qu' on appelle en Java,
l' opération d' incrémentation de la variable marches. C' est à dire, augmenter de 1, la valeur de cette variable. C' est pourquoi l' affichage
est de 125 (124 + 1). Puis l' instruction de la ligne 9 affiche une ligne vide.
La ligne 10 peut aussi étonner un mathématicien. Mais en Java, ça veut simple dire qu' on ajoute 1 à la valeur de marches. En fin de compte :
variable = variable + 1 équivaut à variable++ équivaut à variable += 1
EXEMPLE 8 :
1. public class Variables29
2. {
3.
4. public static void main (String [] args)
5. {
6. int marches = 124;
7. marches = marches - 1;
8. System.out.println("marches = " + marches);
9. System.out.println();
10. marches--;
11. System.out.println("marches = " + marches);
12. System.out.println();
13. marches -= 1;
14. System.out.println("marches = " + marches);
15. }
16.
17. }
Compilez puis exécutez, il sera affiché :
marches = 123
marches = 122
marches = 121
Même raisonnement que l' exemple précédent. Cette fois, c' est l' opération de décrémentation.
variable = variable - 1 équivaut à variable-- équivaut à variable -= 1
EXEMPLE 10 :
1. public class Variables210
2. {
3.
4. public static void main (String [] args)
5. {
6. int marches = 124;
7. marches = marches - 2;
8. System.out.println("marches = " + marches);
9. System.out.println();
10. marches -= 2;
11. System.out.println("marches = " + marches);
12. }
13.
14. }
Compilez puis exécutez, il sera affiché :
marches = 122
marches = 120
Vous l' aurez compris :
variable = variable - 2 équivaut à variable -= 2
EXEMPLE 11 :
1. public class Variables211
2. {
3.
4. public static void main (String [] args)
5. {
6. int marches = 124;
7. marches = marches * 2;
8. System.out.println("marches = " + marches);
9. System.out.println();
10. marches = *= 2;
11. System.out.println("marches = " + marches);
12. System.out.println();
13. marches = marches / 2;
14. System.out.println("marches = " + marches);
15. System.out.println();
16. marches /= 2;
17. System.out.println("marches = " + marches);
18. }
19.
20. }
Compilez puis exécutez, il sera affiché :
marches = 248
marches = 496
marches = 248
marches = 124
Explications : ligne 7 veut dire : nouvelle valeur de la variable marches = ancienne valeur de marche fois 2. le caractère * est le
signe de la multiplication en java.
variable = variable * 2 équivaut à variable *= 2
D' où l' affichage de marches = 496. On passe de 248 à 248 fois 2 = 496
ligne 13 veut dire : nouvelle valeur de marches = ancienne valeur de marches divisé par 2. le caractère / est le signe de la division en
java.
variable = variable / 2 équivaut à variable /= 2
D' où l' affichage de marches = 124. On passe de 248 à 248 divisé par 2 =
124
EXEMPLE 12 :
1. public class Variables212
2. {
3.
4. public static void main (String [] args)
5. {
6. int a = 1;
7. a + 5 = 2;
8. }
9.
10. }
Compilez ce programme et un message d' erreur sera affiché à caude la ligne 7. Ce messages est :
unexpected type
required variable
found value
a + 5 = 2;
Ce qui veut dire que le type est inconnu. on attend une variable et on trouve une valeur.
En effet, l' expression a + 5 est une valeur. Or, à gauche du signe égal, c' est toujours une variable, autrement dit, un espace mémoire. Java
ne peut pas réserver un espace mémoire à une expression mathématique.
EXEMPLE 13 :
1. public class Variables213
2. {
3.
4. public static void main (String [] args)
5. {
6. int a, b;
7. a = 2;
8. b = 5;
9. System.out.println("a = " + a + " et b = " + b);
10. }
11.
12. }
Compilez puis exécutez, il sera affiché :
a = 2 et b = 5
Sur la ligne 6, on a déclaré 2 variables. En effet, en Java, on peut déclarer simultanément plusieurs variables de même type.
type variable1, variable2, variable3; une virgule et un caractère espace séparent les noms des variblaes déclarées simultanément. Le nom
de la dernière variable est évidement suivi d' un point-virgule. Normal, toute instruction en java se termine toujours par un point-virgule.
LEs autres lignes, vous les comprenez forcément. Sinon, revoyez les exemples précédents.
EXEMPLE 14 :
1. public class Variables214
2. {
3.
4. public static void main (String [] args)
5. {
6. int a, b;
7. a = 2;
8. b = 5;
9. a = b;
10. b = a;
11. System.out.println("a = " + a + " et b = " + b);
12. }
13.
14. }
Compilez puis exécutez, il sera affiché :
a = 5 et b = 5
En mathématique, lorsqu' on donne des valeurs différentes à deux variables, écrire l' égalité entre ces variables devient faux.
Pas en informatique.
Souvenez-vous, écrire a = b veut dire que la valeur de la variable b est mise dans la variable a. Donc, la valeur 5 vient remplacer l' ancienne
valeur qui était 2. Puis en écrivant b = a, ce n' est pas l' ancienne valeur 2 de a qu' on met dans la variable b. Mais plutôt la nouvelle
valeur de a. Puisqu' à ce moment précis, a n' est plus égale 2, mais plutôt égale à 5. Donc, b = 5. D' où l' affichage a = 5 et b = 5
EXEMPLE 15 : échanger les valeurs de deux variables
1. public class Variables215
2. {
3.
4. public static void main (String [] args)
5. {
6. int a, b, t;
7. a = 2;
8. b = 5;
9. t = 2
10. a = b;
11. b = t;
12. System.out.println("a = " + a + " et b = " + b);
13. }
14.
15. }
Compilez puis exécutez, il sera affiché :
a = 5 et b = 2
Pour échanger les valeurs de 2 variables, on est obligé d' utiliser une variable tampon. Car si on écrit a = b; et b = a; on se retrouve
à la fin avec la même valeur dans les deux variables. Exemple 14. Car en commençant par dire que a = b; la première valeur de a disparaît à
jamais. D' où l' utilité de la variable tampon t dans laquelle on commence par mettre la valeur initiale de a.
EXEMPLE 16 : échanger les valeurs de 3 variables
1. public class Variables216
2. {
3.
4. public static void main (String [] args)
5. {
6. int a, b, c, t;
7. a = 1; b = 2; c = 3;
8. t = a;
9. a = b; b = c; c = a;
10. System.out.println("a = " + a + " et b = " + b + " et c = " + c);
11. }
12.
13. }
Compilez puis exécutez, il sera affiché :
a = 2 et b = 3 et c = 1
Même explication que dans l' exemple précédent. Cet exemple pour vous dire que quel que soient le nombre de variables dont on veut changer les
valeurs, on utilisera une et une seule variable tampon.
EXEMPLE 17 :
1. public class Variables217
2. {
3.
4. public static void main (String [] args)
5. {
6. int a;
7. int b = a + 1;
8. }
9.
10. }
Compilez, il sera affiché un message d' erreur :
variable a might not have been initialized
Ce qui veut dire que la variable a a dû ne pas être initialisée. En Java, avant d' utiliser une variable, il faut lui donner une valeur
initiale. Quand on débute en programmation, on croit que le fait qu' on ne sache pas la valeur d' une variable à la fin du programme fait que
on ne doit pas lui donner une valeur avant de l' utiliser. Erreur grave, fatale.
Donner toujours une valeur à votre variable. Même si sa valeur finale sera différente, la nouvelle valeur viendra chasser l' ancienne.
EXEMPLE 18 :
1. public class Variables218
2. {
3.
4. public static void main (String [] args)
5. {
6. char c = 't';
7. System.out.println(" c = " + c);
8. }
9.
10. }
Compilez puis exécutez, il sera affiché :
c = t
Normal: affichage du contenu d' une variable.
EXEMPLE 19 :
1. public class Variables219
2. {
3.
4. public static void main (String [] args)
5. {
6. char c = ' ';
7. System.out.println(" c = " + c);
8. }
9.
10. }
Compilez puis exécutez, il sera affiché :
c =
Normal: affichage du contenu d' une variable. Ce contenu étant un espace, on ne le distingue pas.
EXEMPLE 20 :
1. public class Variables220
2. {
3.
4. public static void main (String [] args)
5. {
6. char c = '';
7.
8. }
9.
10. }
Compilez ce programme et il sera affiché un message d' erreur :
empty character literal
Ce qui veut dire que la valeur de la variable de type char n' existe pas. En effet, le type char n' accepte pas zéro caractères. on doit y mettre
un caractère et un seul.
EXEMPLE 21 :
1. public class Variables221
2. {
3.
4. public static void main (String [] args)
5. {
6. String chaine = "";
7.
7. System.out.println(" chaine = " + chaine);
8. }
9.
10. }
Compilez puis exécutez ce programme. Il sera affiché:
chaine =
La chaine de caractères chaine posséde zéro caractère. pourtant, pas de message d' erreur. Donc la variable de type String accepte zéro
caractère. Ce qui n' est pas le cas du type char.
EXEMPLE 22 :
1. public class Variables222
2. {
3.
4. public static void main (String [] args)
5. {
6. String chaine1, chaine2;
7. chaine1 = "bonjour"; chaine2 ="java";
8. System.out.println(" somme des chaines = " + chaine1 + " " + chaine2);
9. }
10.
11. }
Compilez puis exécutez ce programme. Il sera affiché:
somme des chaines = bonjour java
Comme je vous l' ai déjà dit, type String + type String = type String. "bonjour" + "java" = bonjourjava. Pour éviter que ces deux mots soient
collés l' un à l' autre, j' ai pris soin de mettre une chaine de caractères représentée par un caractère espace. J' ai mis cette chaine dans les
parenthèses de System.out.println() à la ligne 7. C' est pourquoi à l' affichage, il y a un espace à l' affichage entre les deux chaines.
Nous aurons l' occasion de revenir sur la manipulation des caractères et des chaines de caractères dans la partie traitant les classes String et
StringBuffer.
Autre chose, sur la ligne 7, vous voyez pour la première fois, deux instructions sur la même ligne. Sachez que c' est normal.
on peut mettre autant d' instructions qu' on veut sur la même ligne. L' important, c' est de terminer chaque instruction par le fameux point-virgule obligatoire.
Attention ! ! ! Ne jamais faire la soustraction des string. Le seul opérateur arithmétique appliqué aux String et aux types char aussi, c' est le + : addition. Evidement, la somme de deux char ne paut pas être un char puisque ce type n' accepte qu' un seul caractère. La somme de deux char est donc forcément un String.
EXEMPLE 23 :
1. public class Variables223
2. {
3.
4. public static void main (String [] args)
5. {
6. char c = 't';
7. String chaine = c;
8.
9.
10. }
11.
12. }
A la compilation, vous aurez un message d' erreur. Incompatible types
found char
required String
types incompatibles. Valeur à affectér est de type char alors que la variable dans laquelle on essaye de la mettre est de type String.
ça peut étonner. Parce que vous vous dîtes que mettre un caractère dans une chaine de caractères n' est pas anormal. type moins étendu dans type
étendu. Il n' en est rien. Vous vous souvenez lorsque je vous ai dit que le type String n' est pas un type primitif. C' est là le problème. Le
type primitif char ne peut pas affecté au type Objet.
EXEMPLE 24 :
1. public class Variables224
2. {
3.
4. public static void main (String [] args)
5. {
6. char c = 't';
7. String chaine = (String)c;
8.
9.
10. }
11.
12. }
A la compilation, vous aurez un message d' erreur. inconvertible types
found char
required String
Types inconvertibles. On ne peut pas convertir le type primitif en un type Objet. L' opération de cast n' est pas possible.
*****
EXEMPLE 25 :
1. public class Variables225
2. {
3.
4. public static void main (String [] args)
5. {
6. char c = 'e'; String chaine = "pil";
7. chaine = chaine + c;
8. System.out.println("chaine = " + chaine);
9.
10. }
11.
12. }
compil + exécution donne à l' affichage :
chaine = pile
On ne peut pas affecter la valeur d' un char à une variable de type string. Mais on peut ajouter un caractère à un String. Parce que l ' addition
d' un type primitif et d' un String donne toujours un type String.
EXEMPLE 26 :
1. public class Variables226
2. {
3.
4. public static void main (String [] args)
5. {
6. char c1, c2;
7. c1 = 't';
8. c2 = 'u';
9. System.out.println("Le pronom est " + c1 + c2);
10. }
11.
12. }
Compilez puis exécutez, il sera affiché :
le pronom est tu
Normal, la fonction System.out.println() additionne les 2 caractères pour en faire une chaine. Mais...
EXEMPLE 27 :
1. public class Variables227
2. {
3.
4. public static void main (String [] args)
5. {
6. char c1, c2;
7. c1 = 't'; c2 = 'u';
8. String pronom = c1 + c2;
9.
10. }
11.
12. }
Si vous compilez ce programme, il sera affiché un message d' erreur :
incompatibles types
found : int
required : String
String pronom = c1 + c2;
qu' est-ce ça veut dire ? ... les types incompatibles. java a trouvé un type int en faisant c1 + c2 alors que vous voulez mettre ce résultat
dans une variable de type String. En l' occurence, la variable pronom.
Etonnant ? Pas vraiment. En effet, le type char est en réalité une donnée de type numérique dont les valeurs vont de 0 à 255.
Quand on met une valeur de type 'a' dans une variable de type char, Java fais ce qu' on appelle une conversion implicite (nous y reviendrons) de
la valeur numérique en type char. De même, la fonction System.out.print() fait la même conversion.
Mais quand on essaye de mettre la somme de deux char dans un String, ça ne va plus. Y a plus de conversion implicite. Pour y arriver, faut
faire une conversion explicite ? Non, on ne peut pas convertir un type primitif (ici, c' est int ) en type Objet (String). Mais il existe une
petite astuce qui permet de mettre la somme de caractères dans une chaine de caractères.
EXEMPLE 28 :
1. public class Variables228
2. {
3.
4. public static void main (String [] args)
5. {
6. char c1, c2;
7. c1 = 't'; c2 = 'u';
8. String pronom = c1 + "" + c2;
9. System.out.println("pronom = " + pronom);
10. }
11.
12. }
compil + exécution, il sera affiché :
pronom = tu
"" = valeur de type String avec zéro caractère. Et vous savez que String + un type primitif donne toujours un String. D' où l' affichage.
EXEMPLE 29 :
1. public class Variables229
2. {
3.
4. public static void main (String [] args)
5. {
6. byte b = 55; short s = 199; int i = 214748364; long l = 922337203685477580l;
7. l = i; i = s; s = b;
8.
9. System.out.println(" l = " + l + "et " i = " + i + " et " s = " + s);
10. }
11.
12. }
Compilez puis exécutez, il sera affiché
l = 214748364 et i = 199 et s = 55
Première explication : Lorsque vous déclarez une variable de type long et que vous lui affectez une valeur qui ne se trouve pas dans l' intervalle du type int, c' est à dire une valeur supérieure à 2147483647 et inférieure à - 2147483648, le compilateur envoie un message d' erreur. On est obligé de terminer par la lettre l. Comme vous le voyez dans l' exemple. Si cette valeur se trouve dans l' intervalle du type int , la lettre l n' est pas nécessaire. Mais pas interdite.
la ligne 7 montre les affectations d' un type à un autre différent. on a mis le int dans le long. Le short dans le int. Et enfin le byte dans le short. Aucun message d' erreur. Parce que cette conversion est normale. le type byte peut entrer dans le type short parce que le type short est plus étendu. byte = nombres entiers compris entre - 128 et + 127. short = nombres entiers compris entre - 32768 et + 32767. Facile à comprendre. C' est comme si on mettait le contenu d' une bouteille d' un litre dans une bouteille de 2 litres. Même raisonnement pour le short dans le int et le int dans le l. La conversion se fait automatiquement. C' est la conversion implicite des variables.
EXEMPLE 30 :
1. public class Variables230
2. {
3.
4. public static void main (String [] args)
5. {
6. byte b = 55; short s = 199; int i = 214748364; long l = 922337203685477580l;
7.
8. b = s; s = i; i = l;
9.
10. }
11.
12. }
Compilez ce programme et ilsera affiché 3 messages d' erreur correspondant aux trois affectations anormales
message 1 :
possible loss of precision found short required byte.
message pour l' affectation b = s; trouvé short comme valeur affecté alors que la variable est de type byte. C' est comme si vous essayez de mettre le contenu d' une bouteille de 2 litres dans une bouteille d' un litre. ça ne va pas. Pour les bouteilles, si le contenu est inférieur ou égal à un litre, il n' y aurait pas de problème. Pour les variables de java, même si la valeur de short est dans l' intervalle de byte, le compilateur java refuse quand même. Il ne compare pas les valeurs, mais plutôt les types.
message 2 :
possible loss of precision found int required short.
message pour l' affectation s = i; Java a trouvé int comme valeur affectée alors que la variable est de type short. C' est comme si vous essayez de mettre le contenu d' une bouteille de 3 litres dans une bouteille de 2 litre. ça ne va pas. Pour les bouteilles, si le contenu de la bouteille de 3 litres est inférieur ou égal à 2 litres, il n' y aurait pas de problème. Pour les variables de java, même si la valeur de int est dans l' intervalle de short, le compilateur java refuse quand même. Il ne compare pas les valeurs, mais plutôt les types.
message 3 :
possible loss of precision found long required int .
message pour l' affectation i = l; Java a trouvé long comme valeur affectée alors que la variable est de type int. C' est comme si vous essayez de mettre le contenu d' une bouteille de 4 litres dans une bouteille de 3 litres. ça ne va pas. Pour les bouteilles, si le contenu de la bouteille de 4 litres est inférieur ou égal à 3 litres, il n' y aurait pas de problème. Pour les variables de java, même si la valeur de long est dans l' intervalle de int , le compilateur java refuse quand même. Il ne compare pas les valeurs, mais plutôt les types.
EXEMPLE 31 :
1. public class Variables231
2. {
3.
4. public static void main (String [] args)
5. {
6. byte b = 55; short s = 101;
7. b = (byte)s;
8. System.out.println("valeur de b = " + b);
9.
10. }
11.
12. }
après compilation puis exécution, pas de message d' erreur. Cette fois, avant de mettre un short dans un byte, type moins étendue, on a pris une
précaution. On a effectué une conversion explicite. En java, ça s ' appelle le cast. La ligne 7 veut dire, transformer la valeur du short en byte,
(byte)s, puis mettre le résultat dans un byte. Ici, la valeur du short (101) se trouve dans l' intervalle du type byte (- 128 et + 127). C' est
pourquoi à l' affichage on a :
valeur de b = 101
Maintenant, essayons de mettre une valeur short hors intervalle du type byte et vooyons ce que ça va donnér
EXEMPLE 32 :
1. public class Variables232
2. {
3.
4. public static void main (String [] args)
5. {
6. byte b = 55; short s = 351;
7. b = (byte)s;
8. System.out.println("valeur de b = " + b);
9.
10. }
11.
12. }
Après compilation puis exécution, il sera affiché :
valeur de b = 95
La question logique qu' on peut se poser est de savoir pourquoi la valeur affichée n' est pas 127. La bouteille de 2 litres dont le contenu est
1.2 litres, et qu' on essaye de mettre dans une bouteille de 1 litre. On aura la bouteille de 1 litre pleine. Et le reste sera perdu.
Pour ce qui est de l' espace mémoire, les choses sont moins triviales. Un calcul compliqué aboutit à la valeur 95 affichée. Pour vous, débutants
en programmation, il n' est pas nécessaire de le comprendre. Contentez-vous d' abord de comprendre l' art de programmer. Les livres de java
réservés aux non débutants vous feront mieux comprendre ces choses lorsque vous ne serez plus débutant.
Pour les autres types entiers, vous pouvez utilisez le même principe de cast poour mettre une valeur d' un type dans une variable de type moins
étendue. Du int dans du short ou dans du byte et du long dans du int ou dans du short ou dans du byte.
EXEMPLE 33 :
1. public class Variables233
2. {
3.
4. public static void main (String [] args)
5. {
6. int x = 2; int y = 2;
7. boolean proposition = x==y;
8. System.out.println("proposition = " + proposition);
9.
10. }
11.
12. }
Après compilation puis exécution, il sera affiché :
proposition = true
La ligne 7 présente la déclaration puis l' affectation d' une variable booléenne nommée proposition. On lui affecte une valeur qui va paraître
bizarre au programmeur débutant. Cette valeur (x==y) représente une valeur booléenne qui est soit true (vraie) ou false (faux fausse).
Le signe = représente l' opérateur d' affectation d' une variable. Mais le signe == représente l' opérateur de comparaison. En
écrivant x==y (ou x == y), c' est comme si on se demandait s' il y a égalité entre x et y. Si la réponse est oui, alors, la valeur booléenne
que représente x == y est true (vraie : x est bien égal à y). Dans le cas contraire, la réponse est non et la valeur booléenne est false (faux :
x n' est pas égal à y.
EXEMPLE 34 :
1. public class Variables234
2. {
3.
4. public static void main (String [] args)
5. {
6. int x, y, z, t; x = 1; y = 5; z = 35; t = 65;
7. boolean proposition1, proposition2, proposition3, proposition4;
8. proposition1 = x > y; proposition2 = x < y; proposition3 = z == t;
9. proposition4 = z != t;
10. System.out.println("x est sup\u000e9rieur \u000e0 y ? : " + proposition1);
11. System.out.println("y est inf\u000e9rieur \u00e0 x ? : " + proposition2);
12. System.out.println(" z est \u000e9gal \u00e0 t ? : " + proposition3);
13. System.out.println(" z n' est pas é\u000e9gal \u00e0 t? : " + proposition4);
14. }
15.
16. }
Après compilation puis exécution, il sera affiché :
x est supérieur à y ? : false
x est inférieur à y ? : true
z est égal à t ? : false :
z n' est pas égal à t ? : true
< veut dire inférieur. > veut dire supérieur. == veut dire égal (en comparaison bien sûr. pas en affectation). Et != veut dire différent ou
n' est pas égal.
Prenez l' habitude, afin d' éviter des risques d' erreur, de mettre les parenthèses autour des expressions de comparaison. Vivement conseillé.
Vivement, vivement, vivement conseillé.
EXEMPLE 35 :
1. public class Variables235
2. {
3.
4. public static void main (String [] args)
5. {
6. int x, y, z, t; x = 1; y = 5; z = 35; t = 65;
7. boolean proposition1, proposition2, proposition3, proposition4;
8. proposition1 = (x > y) || (z < t); proposition2 = (x < y) || (z < t);
9. proposition3 = (x < y) || (z > t); proposition4 = (x > y) || (z > t);
10. System.out.println("(x > y) ou (z < t) : " + proposition1);
11. System.out.println(" (x < y ) ou (z < t): " + proposition2);
12. System.out.println(" (x < y ) ou (z > t) : " + proposition3);
13. System.out.println("(x > y) ou (z > t) : " + proposition4);
14. }
15.
16. }
compilation puis exécution donnent à l' affichage :
(x > y) ou (z < t) : true
(x < y ) ou (z < t): true
(x < y ) ou (z > t) : true
(x > y) ou (z > t) : false
D' abord, le signe || s' obstient en appuyant simultanément sur les touches altGr et la touche 6
Ce signe veut dire ou. Le ou inclusif. Comme en mathématique, le ou renvoie false (faux) dans le cas ou les deux opérandes sont fausses. Evidement,
(x > y) est fausse et (z > t) est aussi fausse.
Dans les 3 autres cas (vraie, vraie - vraie, fausse- fausse, vraie), le ou renvoie forcément vraie. D' où l' affichage
EXEMPLE 36 :
1. public class Variables236
2. {
3.
4. public static void main (String [] args)
5. {
6. int x, y, z, t; x = 1; y = 5; z = 35; t = 65;
7. boolean proposition1, proposition2, proposition3, proposition4;
8. proposition1 = (x > y) && (z < t); proposition2 = (x < y) && (z < t);
9. proposition3 = (x < y) && (z > t); proposition4 = (x > y) && (z > t);
10. System.out.println("(x > y) et (z < t) : " + proposition1);
11. System.out.println(" (x < y ) et (z < t): " + proposition2);
12. System.out.println(" (x < y ) et (z > t) : " + proposition3);
13. System.out.println("(x > y) et (z > t) : " + proposition4);
14. }
15.
16. }
compilation puis exécution donnent à l' affichage :
(x > y) et (z < t) : false
(x < y ) et (z < t): true
(x < y ) et (z > t) : false
(x > y) et (z > t) : false
D' abord, le signe && s' obstient en appuyant 2 fois sur la touche 1
Ce signe veut dire et. Comme en mathématique, le et renvoie true (vraie) dans le cas ou les deux opérandes sont vraies. Evidement,
(x < y) est vraie et (z < t) est aussi vraie.
Dans les 3 autres cas (vraie, fausse - fausse, vraie- fausse, fausse), le ou renvoie forcément fausse. D' où l' affichage
EXEMPLE 37 :
1. public class Variables237
2. {
3.
4. public static void main (String [] args)
5. {
6. int x, y, z, t; x = 1; y = 5; z = 35; t = 65;
7. boolean proposition1, proposition2, proposition3, proposition4;
8. proposition1 = (x > y); proposition2 = !(x > y);
9. System.out.println("(x > y) : " + proposition1);
10. System.out.println("non (x < y ) : " + proposition2);
11. }
12. }
compilation puis exécution donnent à l' affichage :
(x > y) : false
non (x < y ) : true
De même que != veut dire différent, le contraire de =, de même !(expression booléenne) veut dire contraire de expression booléenne.
x supérieur à y renvoie false car effectivement x n'est pas supérieur à y. d' ou (x > y) : false
le contraire renvoie évidement true. D' où l' affichage non (x < y ) : true.
Bien que nous ayons abordé 37 exemples sur les opérations sur les variables, je peux vous dire qu' on n' en a pas encore terminé. Si je veux
continuer à vous donner d' autres exemples, je risquerais d' aborder les strucures de contrôle que nous verrons plus tard.
Avant d' y arriver, nous allons voir comment manipuler les variables avec des fonctions prédéfinies par Java. D' abord, les fonctions
mathématiques pour manipuler les nombres réels (double, float, long, int, short et byte : un nombre entier est dorcément réel. exemple 2 = 2.0).
Ces fonctions sont regroupées dans une classes appelée Math
Ensuite, nous verrons les fonctions permettant de manipuler les caractères et surtout les chaines de caractères. Ces fonctions sont regroupées
dans les classes String et StringBuffer.
| précédent | sommaire | accueil | suivant |