调用方法的过程属于值传递,值传递改变不了实参的值。
首先我们看一段代码:
public class change {
public static void main(String[] args){
int a=100;
System.out.println(a);
a++;
System.out.println(a);
a=100;
change1(a);
System.out.println(a);
}
public static void change1(int x){
x++;
}
}
按照惯性思维,第一个输出的是a的值,为100;第二个输出的是a++的值,为101;第三个调用了change1方法,这个方法用于把变量值加1,所有调用此方法后a的值应该为101。
但是:输出结果为 100 101 100
也就是说后面调用change1方法并没有改变a的值。
为什么?
首先我们要知道什么是形参,什么是实参,什么是值传递?
//比如这个代码
int a=10;
int b=11;
change(a,b);
void change(int x,int y){
x++;
y++;
}
/* a,b就为实参;
方法中的,x,y就为形参;
调用change方法对a,b进行操作的过程就叫值传递
*/
对于值传递有以下几种定义,简单来说就是值传递中传递的那个值只在调用期间有效,只是暂时的,所以通过值传递调用方法是改变不了实参的值的。
1、对于基本类型参数,在方法体内对参数进行重新赋值,并不会改变原有变量的值。
2、对于引用类型参数,在方法体内对参数进行重新赋予引用,并不会改变原有变量所持有的引用。
3、方法体内对参数进行运算,不影响原有变量的值。
4、方法体内对参数所指向对象的属性进行操作,将改变原有变量所指向对象的属性值。