In Java, there are two parameter passing mechanisms: passing by value and passing by address.
When a basic type is passed as a parameter, it is a copy of the passed value. No matter how you change this copy, the original value will not change; it is a pass-by-value.
Passing an object as a parameter copies a copy of the object's address in memory and passes it to the parameter; it is a pass-by-address.
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; // ③}
Observation Output the results and find that the value of n has not changed.
Because n and num are basic types, the values are directly stored in variables.
The flow chart is as follows (corresponding to ①②③ in the code):
First look at the String example:
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"; // ③}
Observe the results and find that str has not changed. Here is an analysis based on the flow chart:
After ① is executed, an object reference str will be generated in the heap, which contains the address index, which points to the memory. The real String object
generates the object reference s in ②. Through the pass-by reference, it also gets the address index of "hello".
In ③ reassign the object reference s. It stands to reason that the value of the object should be from "hello" -> "world". But it creates a new object because of the immutability of String, because a new object is created once String changes.
Let’s look at the StringBuffer example again:
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"); // ③} }
Observe the results and find that stb has changed because the StringBuffer object is Variable, changing its content will not create a new object
The above is the content of 14.Java Basics - Parameter Passing, for more related content, please pay attention to PHP Chinese Net (m.sbmmt.com)!