• 基本数据类型的存储:在方法中定义的非全局基本数据类型变量的具体内容是存储在栈中的

java方法调用者和被调用者 java调用方法中的变量_java方法调用者和被调用者

  • 引用数据类型的存储:只要是引用数据类型变量,其具体内容都是存放在堆中的,而栈中存放的是其具体内容所在内存的地址

java方法调用者和被调用者 java调用方法中的变量_java_02

代码演练

====

有了上面的基础知识储备,我们来讲三个代码示例,帮助大家理解 在 java 中 参数是如何传递的。

第一种:传 基本数据类型

package test;



/**

 * ClassName: changeData <br/>

 * Description: 调用方法 传递的是基本数据类型 能改变其值吗?

 * date: 2021/5/6 16:16<br/>

 *

 * @author yiqi<br />

 * @since JDK 1.8

 */

public class changeData {



    public static void main(String[] args) {

        int a = 10;

        System.out.println("改变前的a ->" + a);

        changeA(a);

        System.out.println("改变后的a ->" + a);

    }



    private static void changeA(int temp) {

        temp = 12;

    }

}

java方法调用者和被调用者 java调用方法中的变量_java_03

结果证明:调用方法,传入 基本数据类型 变量的值 ,原始值没变

原因分析:因为 基本数据类型 作为方法参数 传递给方法 是 一种值拷贝,你改变的是他的兄弟,不是他自身。

图解分析:

java方法调用者和被调用者 java调用方法中的变量_java方法调用者和被调用者_04

第二种:传 引入数据类型

package test;



/**

 * ClassName: changeData <br/>

 * Description: 调用方法 传递的是引用数据类型 能改变其值吗?

 * date: 2021/5/6 16:16<br/>

 *

 * @author yiqi<br />

 * @since JDK 1.8

 */

public class changeData {



    public static void main(String[] args) {

        person p = new person();

        System.out.println("改变前的age ->" + p.age);

        changeA(p);

        System.out.println("改变后的age ->" + p.age);

    }



    private static void changeA(person temp) {

        temp.age = 12;

    }

}



class person{

    int age = 10;

}

java方法调用者和被调用者 java调用方法中的变量_后端_05

结果证明:调用方法,传入 引用数据类型 变量的值 ,原始值变了

原因分析:因为 引用数据类型 作为方法参数 传递给方法 是 一种地址(引用)拷贝,你改变了这个地址对应的值,就是改变了他自身。