(blog content from the core Java Volume one)
1. XX Call: Method parameters are passed in the programming language:
Reference Call (call by reference) : Indicates that the method received a variable address provided by the caller.
value is called (Call by value) : Indicates that the method received a value supplied by the caller.
named Call (Call by name) : has become history.
2. Java uses value calls, and only values are called. This means that the method obtains a copy of the parameter value, not the parameter value itself, so the method cannot modify any of the parameter variables passed to it.
Look at the following code:
Public class Test {
Public Static void Main (string[] args) {
int percent = 10;
Triplevalue (percent);
System. out. println (percent);
}
Public Static void triplevalue (int x) {
x = x * 3;
}
}
Output: 10
As you can see, regardless of how this method is called, after execution, The value of Persent is still ten. Specific implementation process:
The ①x is initialized to a copy of the Persent (that is, ten). At this point x is x,persent is persent, but the value is the same.
②x is multiplied by 3 to be equal to. But persent is still ten.
③ This method ends, the parameter variable x is no longer used.
3. However, there are two types of method parameters: Basic data Type (numeric, Boolean), object reference.
A method cannot modify a parameter of a base data type. The object reference is different as a parameter. At this point, the method obtains a copy of the object reference. object reference and its copy, referencing an object at the same time.
Look at the following code:
Public class Test {
Public Static void Main (string[] args) {
Circle C = new circle ();
C.R = 1;
bigger (c);
System. out. println (C.R);
}
Public Static void bigger (Circle C2) {
C2.R = c2.r+3;
}
}
class circle{
int R;
}
Output: 4
Specific implementation process:
The ①C2 is initialized to a copy of the C value, which is a reference to an object.
The ②bigger method is applied to this object reference. Therefore, the R value of the Circle object referenced by C2 and C increases by 3.
after the ③ method finishes, the parameter variable c2 is no longer used. C continue referencing this R value has increased by 3 for the circle object.
4. many programming languages (especially C + + and Pascal) provide two ways to pass parameters: value invocation and reference invocation. Some programmers think that the Java programming language uses reference calls to objects, which is actually not true. As this misunderstanding has a certain universality, so here is a counter-example, to elaborate on this issue.
First, write a method that swaps two round objects:
Public Static void swap (Circle x,circle y) {
Circle temp = x;
x = y;
y = temp;
}
If the Java programming language uses reference calls to objects, this method should be able to achieve the effect of exchanging data:
Circle A = new circle (1);
Circle B = new circle (2);
Swap (A, B);
System. out. println (A.R);
System. out. println (B.R);
Output:
1
2
However, the method does not alter the object references stored in variables a and b . The parameters x and y of the swap method are initialized to a copy of two object references, and this method swaps the two copies,a and the b the object reference in does not change. Finally, in vain, the parameter variables x and y are discarded at the end of the method . This process illustratesthatJava does not use reference calls to objects, but rather to value passing.
5. Summary:
(1) A method cannot modify a parameter of a base data type (that is, numeric and Boolean).
(2) A method can manipulate the state of the object it refers to by using the object parameter.
(3) A method cannot have an object argument referencing a new object.
Note:C + + has value calls and reference calls. The reference parameter is marked with a & symbol. For example, it is easy to implement the Void swap (circle& a,circle& b) method and implement the purpose of modifying their reference parameters.
Java method parameter-value call, reference call problem