bonjour une question vraiment bete
quel est la valeur de s
Code : Sélectionner tout - Visualiser dans une fenêtre à part String s ;
je dirais null mais quel est la signification sur le web il parle d'adresse memoire
merci d'avance
bonjour une question vraiment bete
quel est la valeur de s
Code : Sélectionner tout - Visualiser dans une fenêtre à part String s ;
je dirais null mais quel est la signification sur le web il parle d'adresse memoire
merci d'avance
Ta valeur sera bien null.
Ce qui veut dire que tu as sur ton stack une reference qui ne pointe sur rien dans ton heap.
Euh non.
Ça dépend où tu déclares ça.
Si c'est un champ :
Alors là oui, s est null. Ce code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 class Test { String s; }
affichera null.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Test test = new Test(); System.out.println(test.s);
Mais il n'y a pas de stack qui tienne. Les champs d'un objet sont stockés dans le heap. C'est une variable référence stockée dans le heap, pour indiquer que la référence n'est vers aucun objet.
Si c'est une variable locale :
Dans ce cas, s n'a pas de valeur, et n'en aura pas tant que tu ne lui en auras pas donné une. Il n'est pas possible de lire la valeur de s.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 class Test { void test() { String s; } }
Ce code :
ne compile pas, car il essaie de lire la valeur de s sans lui avoir donné de valeur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 class Test { void test() { String s; System.out.println(s); } }
Je suis pas sur d'avoir bien compris la phrase mais la reference vers l'objet est bien stockee dans le stack.Mais il n'y a pas de stack qui tienne. Les champs d'un objet sont stockés dans le heap. C'est une variable référence stockée dans le heap, pour indiquer que la référence n'est vers aucun objet.
Juste pas, c'est un champ d'objet et les objets sont dans le heap.
Ou alors quand on veut entrer dans les détails techniques d'optimisation JIT, on ne peut pas savoir si la JVM le mettra dans la stack ou dans le heap, c'est décidé en fonction critères variés. En termes de bytecode par contre, c'est un champ d'objet, et les objets sont dans le heap.
merci thelvin j'ai fais exactement les memes tests que toi mais ce que je ne comprends pas string s ="" veut dire que le champ est vide
mais la il y a une adresse memoire dans ce cas
un champ vide a une adresse memoire ?
merci d'avance
J'ai trouve un site parlant des references dans le stack pointant sur l'objet dans le heap (Dans la plupart des cas) :
Source : https://www.journaldev.com/4098/java...s-stack-memoryJava Stack Memory
Java Stack memory is used for execution of a thread. They contain method specific values that are short-lived and references to other objects in the heap that are getting referred from the method.
Non, ça veut dire que la String qu'il contient, c'est celle qui a zéro caractère.
Tu sais qu'une String, c'est jamais qu'une suite de caractères. Par exemple "Bonjour" c'est juste B puis o puis n puis j puis o puis u puis r. Et "A" c'est juste une séquence de un caractère, le caractère A.
Eh bien "" c'est une séquence de zéro caractère. Quand on essaie de l'afficher, on affiche zéro caractère donc on n'affiche rien. Et du coup on peut appeler ça la chaîne vide, pourquoi pas.
Mais ce n'est pas le champ qui est vide. C'est la chaîne qu'il contient qui est vide. Même si elle contient zéro caractère, elle n'en est pas moins un objet String auquel on peut demander sa taille ou de le concaténer avec un autre. Comme tous les objets, elle a donc une adresse.
Et alors ? En quoi ça s'applique aux exemples donnés ?
De toute façon, si tu veux vérifier comment fonctionne Java, le plus simple et de consulter les spécifications. Ici : https://docs.oracle.com/javase/specs/
Merci infiniment j'ai appris ça en java
Mais ce que je ne comprends pas quel est l'intérêt d'avoir une chaîne de caractères avec zéro caractère
Car par définition c'est une chaîne j'ai passé une nuit blanche à faire d3s tests![]()
Essaie de voir ça comme un ensemble ou une liste au lieu d'une chaîne.
Un ensemble vide est toujours un ensemble. Une liste vide est une liste.
Les caractères d'une String sont contenus dans un tableau :
Donc de même qu'un tableau peut avoir une taille de 0, une String peut être de longueur 0.
Code : Sélectionner tout - Visualiser dans une fenêtre à part private final byte[] value;
Partager