CodeGym /Cours /Syntaxe Java /Types de données primitifs

Types de données primitifs

Syntaxe Java
Niveau 2 , Leçon 2
Disponible

Salut, Amigo ! J'aimerais te parler de la structure interne des variables. Comme tu le sais déjà, chaque variable est associée à une zone de mémoire où sa valeur est stockée. »

« Oui. Tu m'en avais parlé la dernière fois. »

« Parfait. C'est bien que tu t'en souviennes. Je poursuis. »

« Tous les types composites sont constitués de types plus simples. Et ces derniers sont eux-mêmes constitués de types encore plus simples. On finit par se retrouver avec des types primitifs, qui ne peuvent pas être simplifiés davantage. C'est ainsi qu'on les appelle : types primitifs. Par exemple, int est un type primitif, mais String est un type composite qui stocke ses données sous forme de tableau de caractères (où chaque caractère a le type primitif char). »

« Très intéressant. Continue. »

« Les types composites sont formés en regroupant des types plus simples. Ces types sont ce que nous appelons des classes. Lorsque nous définissons une nouvelle classe dans un programme, nous déclarons un nouveau type de données composite. Ses données seront soit d'autres types composites soit des types primitifs. »

Code Java Description
public class Person
{
   String name;
   int age;
}
Un nouveau type composite est déclaré : Person.
Ses données sont stockées dans la variable String (type composite) name et la variable int (primitive) age
public class Rectangle
{
   int x, y, width, height;
}
Un nouveau type composite est déclaré : Rectangle.
Il se compose de quatre variables int (type primitif).
public class Cat
{
   Person owner;
   Rectangle territory;
   int age;
   String name;
}
Un nouveau type composite est déclaré : Cat. Il dispose des variables suivantes :
owner, du type composite Person
territory, du type composite Rectangle
age, du type primitif int
name, du type composite String

« Pour l'instant tout est clair, même si ça me semble un peu tordu. »

« Les gros types (composites) contiennent de nombreux petits types (primitifs). C'est pourquoi les objets de ce type prennent une grande quantité de mémoire, plus que les variables des types primitifs. Parfois beaucoup plus. Effectuer des opérations d'affectation pour de telles variables prenait autrefois beaucoup de temps et nécessitait de copier de grandes sections de mémoire. C'est pourquoi les variables de types composites ne stockent pas l'objet lui-même, mais plutôt une référence à cet objet, c'est-à-dire son adresse à quatre octets. C'est assez pour désigner les données de ces objets. La machine Java se charge de toutes les complexités associées. »

« Là, par contre, je n'ai rien compris. »

« Plus tôt, nous avons comparé une variable à une boîte. Si tu veux stocker le numéro 13 dedans, tu peux écrire 13 sur une feuille de papier et la mettre dans la boîte. »

« Mais imagine que tu as besoin de stocker quelque chose de plus gros dans la boîte (variable). Disons, un chien, une voiture ou ton voisin. Au lieu d'essayer de mettre quelque chose qui ne rentrera jamais dans ta boîte, tu peux faire quelque chose de plus facile : utilise une photo de ton chien au lieu de ton compagnon à quatre pattes, une plaque d'immatriculation au lieu d'une vraie voiture, ou un numéro de téléphone au lieu de ton voisin. »

« Nous prenons un morceau de papier et écrivons le numéro de téléphone de ton voisin. C'est comme une référence à un objet. Si nous copions le morceau de papier avec le numéro de téléphone de ton voisin dessus et que nous le mettons dans plusieurs boîtes, tu auras de nouvelles références à ton voisin. Mais tu n'as toujours qu'un seul voisin. Tu comprends ? »

« Une caractéristique importante du stockage de données avec cette méthode est que tu peux avoir de nombreuses références à un seul objet »

« C'est super intéressant ! J'ai presque compris. Redis-moi une dernière fois : que se passerait-il si j'affectais une variable d'un type composite à une autre variable du même type composite ? »

« Alors les deux variables stockeraient la même adresse. Cela signifie que si tu modifies les données de l'objet référencé par une variable, tu modifies aussi les données référencées par l'autre. Les deux variables font référence au même objet. Bien sûr, il peut y avoir beaucoup d'autres variables qui stockent également des références vers cet objet. »

« Que font les variables de type composite (référence/classe) si elles ne possèdent pas de référence vers un objet ? Est-ce seulement possible ? »

« Oui, Amigo. Tu vas plus vite que moi avec ta question. C'est possible. Si une variable de type référence (composite) ne stocke pas une référence vers un objet, elle stocke ce qu'on appelle une 'référence null'. En gros, ça veut dire qu'elle référence un objet dont l'adresse est 0. Cependant, la machine Java ne crée jamais d'objet à cette adresse, dont elle sait toujours que si une variable de référence contient 0, elle ne pointe vers aucun objet. »

Code Java Description
String s;
String s = null;
Déclarations équivalentes.
Person person;
person = new Person();
person = null;
Nous créons une variable personne dont la valeur est null.
Nous lui affectons l'adresse d'un objet Personne nouvellement créé.
Nous affectons null à la variable.
Cat cat = new Cat();
cat.owner = new Person();
cat.owner.name = "God";
Nous créons un objet Chat et stockons son adresse dans la variable chat ; chat.proprietaire a la valeur null.
Nous définissons chat.proprietaire sur l'adresse d'un objet Personne nouvellement créé.
chat.proprietaire.nom a toujours la valeur null.
Nous définissons chat.proprietaire.nom sur « Dieu »

« Est-ce que j'ai bien compris ? Les variables sont divisées en deux types : les types primitifs et les types de référence. Les types primitifs stockent directement des valeurs, tandis que les types de référence stockent une référence vers un objet. Les types primitifs comprennent int, char, boolean et bien d'autres. Les types de référence incluent tout le reste. Nous utilisons des classes pour les créer. »

« C'est tout à fait exact, mon garçon. »

« Alors comme ça tu penses avoir tout compris. Voici quelques missions pour t'aider à consolider tes connaissances. »

Commentaires (15)
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION
Yves PETIT niveau 6, Leyment, France
1 janvier 2025
J'ai recommencé 10 fois car il manquait le point en fin de phrase !!! Sur les autres leçons il ne fallait pas le mettre sinon c'était une erreur. Assez approximatif le correcteur, dommage...
Simon spock niveau 3, Grevenmacher, Luxembourg
28 avril 2024
Attention spoiler: Pourquoi je n'obtiens pas le même résultats avec double TF = (9/5) * celsius + 32; ou double TF = (9/5.0) * celsius + 32; (le 5.0) m'a mis l'exrcice correct merci d'avance !
Simon spock niveau 3, Grevenmacher, Luxembourg
28 avril 2024
explication trouvé (merci tchatgpt): En Java (et dans de nombreux langages de programmation), lorsque vous effectuez une division entre deux nombres entiers comme 9 et 5 (c'est-à-dire 9/5), le résultat sera également un entier. Dans ce cas, 9/5 évaluera à 1 (car la division entière de 9 par 5 donne 1 avec un reste de 4).
hugo.caseiro2004 niveau 6, France, France
23 mai 2023
Pour le premier exercice vous devez effectivement utiliser un "double" et mettre 9 en 9.0 et 5 en 5.0 dans la formule, sinon l'exercice vous contera comme faux. =) (PS : j'ai galéré sur ça pendant 20min).
hugo.caseiro2004 niveau 6, France, France
23 mai 2023
comptera
Hola Java niveau 2, Orlando, France
21 mars 2023
Slt, premier exo, réussis en moins de 15 min cependant, je ne comprends pas quelque chose ! Pq créer une classe (public class Solution { public static void main(String[] args) ) en Main pour ne rien écrire dedans, donc si je comprends bien, le main ici renvoie à la référence/objet : public static void imprimerCirconferenceCercle(int radius) { Je ne comprends rien -_- je suis perdu.
Mysterradar niveau 3, France
10 novembre 2022
la variable double est compliquée
Lou niveau 6, Spain
27 août 2022
Petite question sur : Notre premier convertisseur ! Je ne comprends pas pourquoi cette formule n'est pas acceptée : double fahrenheit = (9 / 5) * celsius + 32; return fahrenheit ; Le fait que la divisin de 9 par 5 est entre parenthèses, est il vraiment un problème ? Sans devrait-ce pas être un poil plus "souple" ?
Hiomai Pambrun niveau 9, Papeete, French Polynesia
12 octobre 2022
Hello, j'ai eu le même problème est en fait, en essayant avec une calculatrice j'ai eu sur 9/5 = 1.8 et quand je faisait un essais avec le code, j'avais 1.0, ce qui était bizarre, puis j'ai essayé de mettre le 9/5 avec des décimales, donc 9.0/5.0 et le résultat était correcte. Je pense que le double veut calculer des nombres décimaux, comme le float aurait été 9f/5f :) Courage.
Anonymous #10963786 niveau 4, Hochst, Austria
22 mars 2022
Celsius s'écrit avec un "S" et pas un "C", j'ai perdu 3h à cause de mon erreur d'orthographe. -_-
Adeline Delcourt niveau 13, Louvain
15 septembre 2021
Certains exercices deviennent trop dur!
Sylfer niveau 15, France
12 décembre 2020
Wow, c'est trop dur d'un coup O__o
Bella niveau 3, Issy-les-Moulineaux, France
21 avril 2020
bonjours pouvez vous m'aider ? svp je ne comprend rien merci .
Wajiha Badirou niveau 3, Canada
30 janvier 2021
qu'est-ce que vous n'aviez pas compris