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

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

//基本数据类型參数传递
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方法。结束程序。

我们看看结果:

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

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

[javase学习笔记]-6.6 基本数据类型參数与引用数据类型參数的传递过程的更多相关文章

  1. JavaSE学习笔记(1)---数据类型、运算符、控制结构

    javaSE学习笔记(1) 数据类型和运算符 1.注释可以提高程序的可读性.可划分为 单行注释 // 多行注释 /.../ 文档注释 /**...*/ 2.标识符的命名规则: 标识符必须以字母.下划线 ...

  2. javaSE学习笔记(16)---网络编程

    javaSE学习笔记(16)---网络编程 基本概念 如今,计算机已经成为人们学习.工作.生活必不可少的工具.我们利用计算机可以和亲朋好友网上聊天,也可以玩网游.发邮件等等,这些功能实现都离不开计算机 ...

  3. javaSE学习笔记(15) ---缓冲流、转换流、序列化流

    javaSE学习笔记(15) ---缓冲流.转换流.序列化流 缓冲流 昨天复习了基本的一些流,作为IO流的入门,今天我们要见识一些更强大的流.比如能够高效读写的缓冲流,能够转换编码的转换流,能够持久化 ...

  4. javaSE学习笔记(11)--- Map

    javaSE学习笔记(11)--- Map 1.Map集合 现实生活中,我们常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一一对应的关系,就叫做映射.Jav ...

  5. JavaSE学习笔记(9)---集合类和泛型

    JavaSE学习笔记(9)---集合类和泛型 1.Collection集合 集合概述 在前面我们已经学习过并使用过集合ArrayList<E> ,那么集合到底是什么呢? 集合:集合是jav ...

  6. JavaSE学习笔记(7)---数组

    JavaSE学习笔记(7)---数组 1.什么是数组 数组是相同类型数据的有序集合.数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成.其中,每一个数据称作一个元素,每个元素可以通过一个 ...

  7. JavaSE学习笔记(4)---抽象类和接口

    JavaSE学习笔记(4)---抽象类和接口 抽象方法和抽象类 ·抽象方法 使用abstract修饰的方法,没有方法体,只有声明.定义的是一种"规范",就是告诉子类必须要给抽象方法 ...

  8. JavaSE学习笔记(3)---面向对象三大特性

    JavaSE学习笔记(3)---面向对象三大特性 面向对象的三大特征:继承.封装.多态 1.封装 面向对象编程语言是对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改.然 ...

  9. JavaSE学习笔记(2)---面向对象基础

    JavaSE学习笔记(2)---面向对象基础 1.面向对象具有三大特征:封装性.继承性和多态性,而面向过程没有继承性和多态性,并且面向过程的封装只是封装功能,而面向对象可以封装数据和功能.所以面向对象 ...

随机推荐

  1. mysql集群搭建教程-基础篇

           计算机一级考试系统要用集群,目标是把集群搭建起来,保证一个库dang了,不会影响程序的运行.于是在孟海滨师哥的带领下开始了我的第一次搭建mysql集群,首先看了一些关于集群的资料,然后根 ...

  2. wap.css

    wap.css 一.总结 1.官方有教程:英语的 http://www.developershome.com/wap/wcss/ 2.wap.css :就是控制页面在手机端样式的 3.DOCTYPE ...

  3. vue 键盘回车事件导致页面刷新的问题,路由多了一个问号

    问题: <el-form @submit.native.prevent> <el-form-item > <el-input @keyup.enter.native=&q ...

  4. 01011_怎么打开任务管理器?win7打开任务管理器方法

    以下几种方法可以打开任务管理器 1.在系统的任务栏点击鼠标右键,然后在弹出的右键菜单中选择“启动任务管理器”: 2.同时按下这三个按钮:Ctrl + Shift + Esc: 3.同时按下键盘的Ctr ...

  5. SSMM框架

    IDEA搭建SSMM框架(详细过程) 相关环境 Intellij IDEA Ultimate Tomcat JDK MySql 5.6(win32/win64) Maven (可使用Intellij ...

  6. Zookeeper源码用ant进行编译为eclipse工程--转载

    原文地址:http://www.it165.net/os/html/201411/10142.html Zookeeper GitHub的下载地址是:https://github.com/apache ...

  7. python3 turtle画正方形、矩形、正方体、五角星、奥运五环

    python3 环境 turtle模块 分别画出 正方形.矩形.正方体.五角星.奥运五环 #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:H ...

  8. GO语言学习(十一)Go 语言循环语句

    Go 语言提供了以下几种类型循环处理语句: 循环类型 描述 for 循环 重复执行语句块 循环嵌套 在 for 循环中嵌套一个或多个 for 循环 语法 Go语言的For循环有3中形式,只有其中的一种 ...

  9. SpringMVC响应Ajax请求(@Responsebody注解返回页面)

    项目需求描述:page1中的ajax请求Controller,Controller负责将service返回的数据填充到page2中,并将page2整个页面返回到page1中ajax的回调函数. 一句话 ...

  10. ganglia错误解决

    1.      运行: 解决: 这时重新启动gmetad,输入命令: service gmetad stop 显示: Shutting down GANGLIA gmetad:             ...