为什么调用方法改变不了变量值

调用方法的过程属于值传递,值传递改变不了实参的值。

首先我们看一段代码:

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、方法体内对参数所指向对象的属性进行操作,将改变原有变量所指向对象的属性值。 

猜你喜欢

转载自blog.csdn.net/weixin_54645719/article/details/126755611