Concepts de base
En Java, il existe deux mécanismes de passage de paramètres : le passage par valeur et le passage par adresse.
Lorsqu'un type de base est passé en paramètre, c'est une copie de la valeur transmise. Peu importe la façon dont vous modifiez cette copie, la valeur d'origine ne changera pas ; -par valeur.
Passer un objet en paramètre copie une copie de l'adresse de l'objet en mémoire et la transmet au paramètre c'est un passage par adresse.
Exemple d'étude
1. Les types de base sont transmis en tant que paramètres
public static void main(String[] args) { int n =3; // ①
System.out.println(n); // 3
chageData(n); // ②
System.out.println(n); // 3}public static void chageData(int num){
num = 10; // ③}
Copier après la connexion
<. 🎜 >Observez le résultat et constatez que la valeur de n n'a pas changé.
Comme n et num sont des types de base, les valeurs sont directement stockées dans des variables.
L'organigramme est le suivant (correspondant à ①②③ dans le code) :
2. 🎜> Premier coup d'oeil à l'exemple String :
En observant les résultats, nous avons constaté que str n'a pas changé. Voici une analyse basée sur l'organigramme :
public static void main(String[] args) {
String str = "hello"; // ①
System.out.println(str); // hello
chageData(str); //②
System.out.println(str); // hello}public static void chageData(String s){
s ="world"; // ③}
Copier après la connexion
Après l'exécution de ①, une référence d'objet str sera générée dans le tas, qui contient l'index d'adresse, qui pointe vers la mémoire. Le véritable objet String génère la référence d'objet s dans ② Grâce à la référence pass-by, il obtient également l'index d'adresse de "hello". Réaffectez les références d'objet s dans ③. Il va de soi que la valeur de l'objet doit être comprise entre "hello" -> "world". Mais cela crée un nouvel objet en raison de l'immuabilité de String, car un nouvel objet est créé une fois que String change.
Regardez l'exemple de StringBuffer :
Observez les résultats et constatez que stb a changé parce que StringBuffer L'objet est mutable et changer son contenu ne créera pas de nouvel objet
public static void main(String[] args) {
StringBuffer stb = new StringBuffer("hello"); // ①
System.out.println(stb); // hello
chageData(stb); // ②
System.out.println(stb); // hello world}public static void chageData(StringBuffer s){
s.append("world"); // ③}
}
Copier après la connexion
Ce qui précède est le contenu de 14. Bases de Java - Passage de paramètres, veuillez faire attention à plus contenu associé Site Web PHP chinois (www.php.cn) !