Bah si que yen a un qui pointe verss qqch assurement et lautre vers qqch ou rien ^^
Version imprimable
Bah si que yen a un qui pointe verss qqch assurement et lautre vers qqch ou rien ^^
ahh .. ouf :)
[EDIT]lequel des deux peut valoir null ??[/EDIT]
Le pointeur :mouarf:
Heu... Peut-être ... :oops:Citation:
Envoyé par NeptuS
Pour moi les références c'est des pointeurs dont on ne peut pas manipuler l'adresse...
a++
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.
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 :D
+1 pour adiGubaCitation:
Envoyé par 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).
Ca pointe sur une zone mémoire contenant un objet pouvant lui-même être null.Citation:
Envoyé par Emplyst
Un pointeur (à la C) pointe sur une zone mémoire pouvant ne rien contenir.
:lol:
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 :aie:
Bonjour ,
Tu viens t'inventer une sacrée machine... ;)
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.Citation:
Envoyé par Emptylist
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.
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 :
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.Code:
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 ....
Etonnant alors qu'on obtienne l'adresse mémoire avec ce code :Citation:
En Java, ce ne sont pas des pointeurs, les handles ne contiennent pas l'adresse mémoire de l'objet
Code:
1
2
3 Object o = new Object(); System.out.println(""+o);
Tout à fait d'accord, mais seulement sur les pointeurs de tableaux.Citation:
Un pointeur (à la C) pointe sur une zone mémoire pouvant ne rien contenir.
Extraits de cours POO (de mémoire) :
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 ...Citation:
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.
*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++.
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 :aie:Citation:
Envoyé par NeptuS
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.
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()).Citation:
Envoyé par NeptuS
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++