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

Langage Java Discussion :

Petite question existentielle (hum hum)


Sujet :

Langage Java

  1. #21
    Membre confirmé Avatar de Emplyst
    Inscrit en
    Mars 2006
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 152
    Par défaut
    Bah si que yen a un qui pointe verss qqch assurement et lautre vers qqch ou rien ^^

  2. #22
    Membre chevronné Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Par défaut
    ahh .. ouf
    [EDIT]lequel des deux peut valoir null ??[/EDIT]

  3. #23
    Membre confirmé Avatar de Emplyst
    Inscrit en
    Mars 2006
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 152
    Par défaut
    Le pointeur

  4. #24
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par NeptuS
    le pointeur peut ne pointer vers aucune zone mémoire alors que la référence, elle, désigne forcément un objet en mémoire ....

    ... euu ... donc il s'agissait bien d'un pointeur en fait adiGuba
    Heu... Peut-être ...

    Pour moi les références c'est des pointeurs dont on ne peut pas manipuler l'adresse...

    a++

  5. #25
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 351
    Par défaut
    Connais pas hashcode. Mais equals si , c'est justement pour voir si deux objets ont la meme valeur.

    Car si on fait ca:

    public class Test
    {
    public static void main(String args[])
    {
    String toto = new String("toto");
    String toto2 = new String("toto");

    if(toto == toto2) System.out.println("c'est egal");
    else System.out.println("c'est faux");
    }
    }

    Le test renvoi faux , car se sont 2 objets différents en memoire et pas le même. Par contre toto.equals(toto2) va renvoyer true car , la methode va verifier que les valeurs contenu dans l'objet sont les meme que dans le second objet passé en parametre.

    pour une string , equal compare chaque caractère , pas besoin de la redefinir , pour un objet plus complexe faut redefinir la methode pour que le test d'egalité fonctionne.

    Je connais pas hashcode mais je doute que soit prevu a la base pour faire des tests d'égalités entre les objets. Et la methode equals est quand meme trés tres simple a utiliser et tres pratique.

  6. #26
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 194
    Par défaut
    En Java, ce ne sont pas des pointeurs, les handles ne contiennent pas l'adresse mémoire de l'objet. Du coup il n'est pas possible de leur appliquer une arithmétique mais surtout, les handles sont interprétés par la JVM qui gère entièrement la mémoire allouée à l'application, ce sont donc bien des références

  7. #27
    Membre Expert
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Par défaut
    Citation Envoyé par adiGuba
    Heu... Peut-être ...

    Pour moi les références c'est des pointeurs dont on ne peut pas manipuler l'adresse...

    a++
    +1 pour adiGuba

    Un pointeur est une référence vers une adresse de la mémoire. Avec un pointeur, le programmeur peut effectuer de l'arithmétique de pointeur et des tests.

    Une référence en Java est du "type obscur". Seule la JVM peut effectuer des opérations avec une référence (Ex: le GC). Le programmeur peut seulement effectuer que des tests (Ex: obj == null).

  8. #28
    Membre chevronné
    Inscrit en
    Avril 2004
    Messages
    503
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 503
    Par défaut
    Citation Envoyé par Emplyst
    *Voix de l'employeur*Oui d'accord mais ca pointe sur quoi alors Monsieur Neptus?
    Ca pointe sur une zone mémoire contenant un objet pouvant lui-même être null.
    Un pointeur (à la C) pointe sur une zone mémoire pouvant ne rien contenir.

  9. #29
    Membre confirmé Avatar de Emplyst
    Inscrit en
    Mars 2006
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 152
    Par défaut

    Au fais Regis.C, (je souligne que question hardware et fonctionnement de la machine je suis pas trop callé) je me demandais si on ne pouvais pas appliquer cette analogie. C-a-d que un pointeur pointerais une adresse physique de la memoire alors qu'une reference serait une adresse physique de la memoire (qui serait donnee, par exemple, par la JVM).

    Je sens que je viens d'inventer un truc la

  10. #30
    Membre Expert
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Par défaut
    Bonjour ,

    Tu viens t'inventer une sacrée machine...

    Citation Envoyé par Emptylist
    C-a-d que un pointeur pointerais une adresse physique de la memoire alors qu'une reference serait une adresse physique de la memoire (qui serait donnee, par exemple, par la JVM).
    Le contenu d'un pointeur, donc sa valeur, repésente toujours une adresse en mémoire. Cette adresse peut être valide ou ne pas l'être. L'objet référé par un pointeur peut ne pas être valide.

    Une référence n'est pas une adresse en mémoire. C'est un "numéro" géré par un système.

    Une référence permet toujours d'accéder à un objet sauf si la référence est égale à null.

  11. #31
    Membre chevronné Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Par défaut
    Vos réflexions ont l'air censées ... mais ce n'est pas ce que racontent les profs ni les bouquins de C++ / Java (je sais, il ne faut pas toujours croire ce que les profs disent).

    De mon côté, je ne suis toujours pas convaincu qu'un objet présent en mémoire puisse être null. De même, si un pointeur null pointe sur un objet null, comment se fait-il que l'instanciation de l'objet alloue une nouvelle zone mémoire à l'objet que l'on crée et y fait pointer le pointeur ? ça n'a pas de sens.

    La preuve par l'exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Object a, b;
    a = null; //pour être sûr.
    b = a;
    a = new Object();
    // a différent de b ....
    Il y a bien eû création d'un nouvel objet, alors que si le pointeur a pointait vers un objet null, celui-ci aurait simplement été remplacé par une instance .... et a aurait été égal à b.

    En Java, ce ne sont pas des pointeurs, les handles ne contiennent pas l'adresse mémoire de l'objet
    Etonnant alors qu'on obtienne l'adresse mémoire avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Object o = new Object();
    System.out.println(""+o);
    Un pointeur (à la C) pointe sur une zone mémoire pouvant ne rien contenir.
    Tout à fait d'accord, mais seulement sur les pointeurs de tableaux.


    Extraits de cours POO (de mémoire) :
    Une référence désigne un objet en mémoire. On peut, via celle-ci, manipuler cet objet. En revanche, la référence, en tant que telle, ne peut être modifiée.

    Le pointeur, lui, contient une adresse mémoire. Cette adresse est celle d'un objet (ou rien). En réalité, l'adresse mémoire contenue dans le pointeur est celle du début de la zone mémoire nécessaire au stockage de l'objet. Cette adresse peut être manipulée et modifiée. On peut aussi s'en servir pour atteindre l'objet désigné, son utilisation devient alors similaire à celle de la référence.
    Bon .. tout ça c'est de mémoire .... il se peut que j'ai inversé pointeur et référence .... mais je ne crois pas ...

  12. #32
    Membre confirmé Avatar de Emplyst
    Inscrit en
    Mars 2006
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 152
    Par défaut
    *manque sa bus dans pas long desloler si mal tapper*
    C,est de java core :
    C++ NOTE: Many people mistakenly belive that Java object variables behave like C++ references. But in C++ there are no null references, and references cannot be assigned. You should think of Java object variables as analogous to object pointers in C++.

  13. #33
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 194
    Par défaut
    Citation Envoyé par NeptuS
    Etonnant alors qu'on obtienne l'adresse mémoire avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Object o = new Object();
    System.out.println(""+o);
    Ce qui s'affiche est retourné par la méthode toString() de Object. C'est une représentation de l'objet, elle désigne clairement l'objet lui-même et non une zone mémoire. Je pense que le nombre hexadécimal est une clé de mapping utilisée par la JVM. M'enfin, là je m'avance un peu

    En tous les cas, en Java, les accès à la mémoire se font au niveau de la JVM, il n'est donc pas nécessaire d'interdire d'initialiser une variable à null. Cela revient à initialiser une référence C avec un pointeur vide, sauf qu'en Java, l'opération n'engendre pas d'erreur car l'interprétation de la référence null se fait au niveau de la JVM.

  14. #34
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par NeptuS
    Etonnant alors qu'on obtienne l'adresse mémoire avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Object o = new Object();
    System.out.println(""+o);
    En fait il s'agit du hashCode() de l'objet, qui peut correspondre à l'adresse mémoire de l'objet dans l'implémentation par défaut de Sun mais ce n'est pas une obligatoire (cf la doc de hashcode()).

    Mais quoi qu'il arrive tu ne peux pas manipuler cette adresse comme tu pourrais le faire dans un programme C/C++, comme par exemple effectuer des opération sur les pointeurs pour accéder plus rapidement aux données (avec les risques que cela implique).

    a++

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [Visuel XP] Petite question sur le theme XP...
    Par ZoumZoumMan dans le forum C++Builder
    Réponses: 12
    Dernier message: 20/01/2005, 14h41
  2. [CR8.5] petite question ..
    Par mcrocher dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 13/09/2004, 15h04
  3. Une petite question
    Par Etienne1 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 10/08/2004, 16h19
  4. [FOREIGN KEY] petite question bete ...
    Par dzincou dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 13/01/2004, 16h35
  5. Petite question sur les performances de Postgres ...
    Par cb44 dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 13/01/2004, 13h49

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