dis que je définis int A = int B. Lorsque je change A après, il ne changera pas la valeur de B. Mais lorsque je fixe une soméclasse A = Someclass B, et je change de contenu d'un SOMECLASS B, et je change de contenu (comme A.Cost), Cela change B.Cost aussi. Quelqu'un peut-il m'expliquer cela? P>
Je pensais que Java est attribué par valeur, pas référence? P>
5 Réponses :
Oui, c'est - mais la valeur d'A est une référence, pas une copie de l'objet lui-même.
J'aime donner l'analogie suivante ... P>
Supposons que deux personnes ont Mon adresse: c'est comme deux variables de type maison code> en Java. Maintenant, l'un d'entre eux vient et peint ma porte rouge. La deuxième personne verra toujours la porte rouge s'ils visitent: P> House jonsHouse = new House(); // Even the variable jonsHouse is only a reference
House firstAddressCopy = jonsHouse; // Just a copy of the reference
House secondAddressCopy = jonsHouse; // Just a copy of the reference
firstAddressCopy.paintDoor(Color.Red);
Color color = secondAddressCopy.getDoorColor(); // Now color will be red
Je pensais que Java est attribué par valeur, pas référence? p> blockQuote>
Que signifie "attribué par valeur"? Êtes-vous peut-être le confondre avec "Pass par valeur / référence"? P>
En tout cas, si vous gérez une instance de classe en Java, vous gérez réellement une référence à cette classe (un peu comme un pointeur en C / C ++). Votre affectation ne copie que la référence, donc A et B se réfèrent à la même instance, c'est-à-dire que les données sont partagées, d'où le résultat. P>
a est une référence à l'objet. Donc, si vous modifiez l'objet état interne em>, il sera reflété à toutes les autres variables pointant vers elle. Si vous réaffectez (Java est pass em> par valeur. Vérifiez a code>, puis b code> ne changera pas: p>
Java passe strictement par valeur. Lorsque vous passez une référence par valeur uniquement, la référence est dupliquée, et non l'objet étant référencé.
@Maven, bien sûr, une erreur stupide, j'y pensais une et écrivit l'autre :) merci
En Java, vos variables peuvent être divisées en deux catégories: objets, et tout le reste (int, long, octet, etc.). P>
Un type primitif (int, long, etc.), contient la valeur que vous attribuez. Une variable d'objet, en revanche, contient une référence à un objet quelque part. Donc, si vous attribuez une variable d'objet à un autre, vous avez copié la référence, à la fois A et B pointe vers le même objet. p>
REMARQUE: Les chaînes en Java sont en réalité des objets, pas des primitives, que les débutants supposent souvent. P>
J'espère que cela aide p>
en Java lorsque vous attribuez un objet à l'objet de son assignation par référence. INT n'est pas un objet en Java, donc lorsque vous attribuez à INT à l'ARD ART ART. p>