zoukankan      html  css  js  c++  java
  • [javase学习笔记]-6.6 基本数据类型參数与引用数据类型參数的传递过程

    这一节基本数据类型參数和引用数据类型參数的传递过程。


    数据类型參数和引用參数我们在前面章节中都已涉及到了,那么我们来看看以下的两段代码:

    //基本数据类型參数传递
    class Demo
    {
    	public static void main(String[] args) 
    	{
    		int x = 3;
    		change(x);//调用方法
    		System.out.println("x = " + x);//
    	}
    	public static void change(int x)
    	{
    		x = 4;
    	}
    }
    
    //引用类型数据參数传递
    class Demo
    {
    	int x = 3;
    	public static void main(String[] args)
    	{
    		Demo d = new Demo();
    		d.x = 9;
    		change(d);
    		System.out.println("d.x = " + d.x);
    	}
    	public static void change(Demo d)
    	{
    		d.x = 4;
    	}
    }
    如今我们来分别对这两对代码的执行程分析一下。

    一、对于基本数据类型參数传递代码的执行过程分析:

    1.main方法进栈内存,main方法中有基本数据类型变量int x;

    2.为main方法中的变量x赋值为3;

    3.调用change(x)方法,则change方法进栈;

    4.为change方法变量x赋值为4;

    5.跳出change方法。同一时候change方法出栈,释放全部change方法和change方法中的x,即把x=4释放掉;

    6.运行打印语句。些时的栈中仅仅有main方法中的x,那么打印出的x=3;

    7.跳出main方法。结束程序。

    我们来看一下打印结果与我们的分析是不是一致的?


    二、对于引用数据类型參数传递代码的执行过程分析:

    1.main方法进栈内存。main方法中有一个类类型变量Demo d;

    2.new创建Demo对象,在堆内存中开辟一个空间。并把空间地址传给d(我们这里如果为0x0078),并为该地址中的x初始化为0,然后把3赋给x;

    3.把d所指堆内存(0x0078)中的x赋为9;

    4.调用change(d)方法。change方法进栈。change方法中的对象d就是main方法中的d,指向之前的堆内存地址(0x0078)。

    5.把d所指堆内存(0x0078)中的x赋为4;

    6.跳出change方法,同一时候change方法出栈,释放change方法和方法中的对象d。

    7.运行打印语句。些时的栈中也是仅仅有main方法。而且d指向堆内存(0x0078),该地址中的x就是步骤5中的值4;

    8.跳出main方法。结束程序。

    我们看看结果:


    我们从两个代码打印出的结果能够看出结果与我们的分析是全然一致的。

    那么,基本数据类型參数和引用数据类型參数的过程就是我们上面分析的过程。


  • 相关阅读:
    ES6-10笔记(class类)
    ES6-10笔记(let&const -- Array)
    小程序的表单提交
    小程序表单回显
    小程序template模板的使用和模板多数据传递
    微信小程序的初始配置
    babel 版本原因运行报错,解决办法
    webpack 和 webpack-cli 安装和使用中出现的问题
    jQuery中操作属性的方法attr与prop的区别
    javaScript 添加和移除class类名的几种方法
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/7364399.html
Copyright © 2011-2022 走看看