Comment mettre à jour une variable dans une classe d'une autre classe
Je réalise que c'est probablement vraiment une question de base, mais je ne peux pas le comprendre.
Dire que j'ai cette classe principale
public class Main{
public static void main(String[] args){
int a = 0;
AddSomething.addOne(a);
System.out.println("Value of a is: "+String.valueOf(a));
}
}
Ici est AddSomething
classe et addOne()
méthode
public class AddSomething{
public static void addOne(int a){
a++;
}
}
La addOne
méthode est de ne pas ajouter quoi que ce soit
System.out.println("Value of a is: "+String.valueOf(a));
//Prints 0 not 1
Comment puis-je faire Add
classe de mise à jour de la variable a
dans Main
classe?
Java est call-by-value.
vérifier stackoverflow.com/questions/3330864/...
Même si quelqu'un de vous donner une autre méthode pour faire ce que vous voulez, mais ce n'est pas vraiment en ajouter un à un, il affecter une nouvelle valeur à un. Donc, je vous suggère de lire un certain livre qui introduisent de JAVA et de voir ce que JAVA Objet et les types primitifs ne sont que de passage lors de l'appel de fonction.
Peut-être que ce post peut vous aider à mieux comprendre ce qui se passe : stackoverflow.com/questions/40480/.... Java est "passage par valeur" et je pense que c'est une chose importante à comprendre.
vérifier stackoverflow.com/questions/3330864/...
Même si quelqu'un de vous donner une autre méthode pour faire ce que vous voulez, mais ce n'est pas vraiment en ajouter un à un, il affecter une nouvelle valeur à un. Donc, je vous suggère de lire un certain livre qui introduisent de JAVA et de voir ce que JAVA Objet et les types primitifs ne sont que de passage lors de l'appel de fonction.
Peut-être que ce post peut vous aider à mieux comprendre ce qui se passe : stackoverflow.com/questions/40480/.... Java est "passage par valeur" et je pense que c'est une chose importante à comprendre.
OriginalL'auteur the_prole | 2015-11-27
Vous devez vous connecter pour publier un commentaire.
addOne
reçoit une copie dea
, de sorte qu'il ne peut pas changer lea
variable de votre méthode principale.La seule façon de modifier cette variable est de renvoyer une valeur à partir de la méthode et de l'affecter en retour à
a
:Donc, il n'y a aucun moyen de passer de l'objet sans faire une nouvelle copie? J'ai pensé que je pourrais contourner ce problème en utilisant les classes statiques en quelque sorte.
Vous pouvez passer à
addOne
une instance d'une classe ayant un int propriété, etaddOne
serait en mesure de la mutation de l'int de la propriété de cette instance.donc, le type primitif de passage par valeur, mais les instances de passer par référence?
Les deux sont le passage par valeur, mais pour les types de référence (c'est à dire les variables de les référer à des instances de classes), si elles se réfèrent à un objet mutable, vous pouvez modifier l'état d'un objet à l'intérieur de la méthode. Vous ne pouvez pas modifier la référence elle-même pour faire référence à un autre objet.
OriginalL'auteur Eran
C'est parce que les types primitifs de java passage par valeur aux méthodes. Une seule façon de faire ce que vous voulez est de réaffecter variable, comme :
et
c'est un objet, de sorte qu'il sera passé par référence. Yep. Vous pouvez le modifier.
Méfiez-vous qu'il est un peu difficile à dire "par la valeur" ou "par référence". Techniquement, tout est passé "par valeur". Dans le cas d'objets de la valeur est la valeur de référence, c'est à dire l'adresse d'objet en mémoire. Il est important de comprendre, parce que vous ne pouvez pas modifier l'objet, c'est à dire que vous ne pouvez pas remplacer votre liste de tableaux (qui est venu comme un paramètre de méthode) avec une autre liste de tableaux, vous pouvez seulement la mutation de l'objet par l'intermédiaire de ses méthodes, par exemple, ArrayList.add().
OriginalL'auteur midikko
Je sais, Eran réponse est ce que vous avez tous besoin. Mais juste pour montrer une autre manière, la publication de cette réponse.
Et dans
AddSomething
classe..AddSomething
doit être dans le même package queMain
classe, commeint a
a défaut modificateur d'accès.OriginalL'auteur Akoder