IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

valeur de string s


Sujet :

avec Java

  1. #1
    Membre très actif
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    433
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 433
    Par défaut valeur de string s
    bonjour une question vraiment bete
    quel est la valeur de s
    je dirais null mais quel est la signification sur le web il parle d'adresse memoire
    merci d'avance

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2013
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 131
    Par défaut
    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.

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Euh non.

    Ça dépend où tu déclares ça.

    Si c'est un champ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class Test {
     
      String s;
     
    }
    Alors là oui, s est null. Ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Test test = new Test();
    System.out.println(test.s);
    affichera null.

    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 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class Test {
     
      void test() {
        String s;
      }
     
    }
    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.

    Ce code :

    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);
      }
     
    }
    ne compile pas, car il essaie de lire la valeur de s sans lui avoir donné de valeur.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2013
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 131
    Par défaut
    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.
    Je suis pas sur d'avoir bien compris la phrase mais la reference vers l'objet est bien stockee dans le stack.

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    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.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre très actif
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    433
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 433
    Par défaut
    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

  7. #7
    Membre expérimenté
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2013
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 131
    Par défaut
    J'ai trouve un site parlant des references dans le stack pointant sur l'objet dans le heap (Dans la plupart des cas) :

    Java 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.
    Source : https://www.journaldev.com/4098/java...s-stack-memory

  8. #8
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par s2a07 Voir le message
    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
    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.

    Citation Envoyé par Yonito Voir le message
    J'ai trouve un site parlant des references dans le stack pointant sur l'objet dans le heap (Dans la plupart des cas) :
    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/
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre très actif
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    433
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 433
    Par défaut
    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

  10. #10
    Membre émérite Avatar de Cincinnatus
    Homme Profil pro
    Développeur d'applications métier
    Inscrit en
    Mars 2007
    Messages
    593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur d'applications métier
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2007
    Messages : 593
    Par défaut
    Citation Envoyé par s2a07 Voir le message
    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
    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private final byte[] value;
    Donc de même qu'un tableau peut avoir une taille de 0, une String peut être de longueur 0.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/03/2013, 11h56
  2. [Débutant] Modifié valeur variable string
    Par TheAntoine17 dans le forum VB.NET
    Réponses: 3
    Dernier message: 26/02/2012, 19h58
  3. Récupération d'une valeur en string sous format spécifique
    Par casavba dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 14/11/2007, 14h04
  4. Réponses: 7
    Dernier message: 23/03/2007, 11h38
  5. [initialisation et valeur] valeur dans String[]
    Par okoax dans le forum Langage
    Réponses: 2
    Dernier message: 18/01/2006, 11h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo