Java statique des paramètres de la méthode
Pourquoi le code suivant retour 100 100 1 1 1
et pas 100 1 1 1 1
?
public class Hotel {
private int roomNr;
public Hotel(int roomNr) {
this.roomNr = roomNr;
}
public int getRoomNr() {
return this.roomNr;
}
static Hotel doStuff(Hotel hotel) {
hotel = new Hotel(1);
return hotel;
}
public static void main(String args[]) {
Hotel h1 = new Hotel(100);
System.out.print(h1.getRoomNr() + " ");
Hotel h2 = doStuff(h1);
System.out.print(h1.getRoomNr() + " ");
System.out.print(h2.getRoomNr() + " ");
h1 = doStuff(h2);
System.out.print(h1.getRoomNr() + " ");
System.out.print(h2.getRoomNr() + " ");
}
}
Pourquoi semble-t-il à passer l'Hôtel par la valeur de doStuff() ?
double possible de stackoverflow.com/questions/40480/is-java-pass-by-reference
Java passe par valeur. Voir la question. (Aussi,
Java passe par valeur. Voir la question. (Aussi,
static
n'a rien à faire avec elle).OriginalL'auteur Blitzkr1eg | 2010-04-28
Vous devez vous connecter pour publier un commentaire.
C'est exactement ce que vous avez dit de le faire 🙂
Que d'autres ont fait remarquer (et est expliqué très clairement dans cet article), Java passe par valeur. Dans ce cas, il transmet une copie de la référence
h1
àdoStuff
. Il y a la copie est écrasée par une nouvelle référence (qui est alors retournée et affecté àh2
), mais la valeur d'origine deh1
n'est pas affecté: il fait toujours référence le premier Hôtel de l'objet avec un numéro de chambre de 100.OriginalL'auteur Péter Török
Référence à l'Hôtel est passé par valeur.
OriginalL'auteur Roman
Parce que Java ne passage par valeur. Seulement dans ce cas, la valeur est une référence à un
Hotel
objet. Ou, pour être plus clair, Java passe une référence à l'Objet même que h1 points. Par conséquent, h1 lui-même n'est pas modifié.OriginalL'auteur Justin Ardini
La référence de l'Hôtel est passé par valeur. Vous êtes seulement changer la locale
hotel
variable dans ledoStuff
de la méthode et de la retourner, de ne pas changer l'originalh1
. Vous pourrait modifier l'originalh1
de l'intérieur de la méthode si vous avez eu une setRoomNr méthode et appeléhotel.setRoomNr(1)
...OriginalL'auteur froadie
Il se porte bien. À l'intérieur de
static Hotel doStuff(Hotel hotel)
, vous êtes la création d'unnew
instance deHotel
, ancienhotel
de référence est inchangé.OriginalL'auteur fastcodejava