[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方法。结束程序。
我们看看结果:
我们从两个代码打印出的结果能够看出结果与我们的分析是全然一致的。
那么,基本数据类型參数和引用数据类型參数的过程就是我们上面分析的过程。
[javase学习笔记]-6.6 基本数据类型參数与引用数据类型參数的传递过程的更多相关文章
- JavaSE学习笔记(1)---数据类型、运算符、控制结构
javaSE学习笔记(1) 数据类型和运算符 1.注释可以提高程序的可读性.可划分为 单行注释 // 多行注释 /.../ 文档注释 /**...*/ 2.标识符的命名规则: 标识符必须以字母.下划线 ...
- javaSE学习笔记(16)---网络编程
javaSE学习笔记(16)---网络编程 基本概念 如今,计算机已经成为人们学习.工作.生活必不可少的工具.我们利用计算机可以和亲朋好友网上聊天,也可以玩网游.发邮件等等,这些功能实现都离不开计算机 ...
- javaSE学习笔记(15) ---缓冲流、转换流、序列化流
javaSE学习笔记(15) ---缓冲流.转换流.序列化流 缓冲流 昨天复习了基本的一些流,作为IO流的入门,今天我们要见识一些更强大的流.比如能够高效读写的缓冲流,能够转换编码的转换流,能够持久化 ...
- javaSE学习笔记(11)--- Map
javaSE学习笔记(11)--- Map 1.Map集合 现实生活中,我们常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一一对应的关系,就叫做映射.Jav ...
- JavaSE学习笔记(9)---集合类和泛型
JavaSE学习笔记(9)---集合类和泛型 1.Collection集合 集合概述 在前面我们已经学习过并使用过集合ArrayList<E> ,那么集合到底是什么呢? 集合:集合是jav ...
- JavaSE学习笔记(7)---数组
JavaSE学习笔记(7)---数组 1.什么是数组 数组是相同类型数据的有序集合.数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成.其中,每一个数据称作一个元素,每个元素可以通过一个 ...
- JavaSE学习笔记(4)---抽象类和接口
JavaSE学习笔记(4)---抽象类和接口 抽象方法和抽象类 ·抽象方法 使用abstract修饰的方法,没有方法体,只有声明.定义的是一种"规范",就是告诉子类必须要给抽象方法 ...
- JavaSE学习笔记(3)---面向对象三大特性
JavaSE学习笔记(3)---面向对象三大特性 面向对象的三大特征:继承.封装.多态 1.封装 面向对象编程语言是对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改.然 ...
- JavaSE学习笔记(2)---面向对象基础
JavaSE学习笔记(2)---面向对象基础 1.面向对象具有三大特征:封装性.继承性和多态性,而面向过程没有继承性和多态性,并且面向过程的封装只是封装功能,而面向对象可以封装数据和功能.所以面向对象 ...
随机推荐
- Dao层封装泛型实现(spring mvc,springjdbctemplate)
代码片段(6) [全屏查看所有代码] 1. [代码]BaseDao 跳至 [1] [2] [3] [4] [全屏预览] ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1 ...
- 2.写给设计师看的HTML&CSS入门指导
转自:http://www.uisdc.com/html-and-css-guide 整体简介 在开始学习HTML&CSS之前,首先要搞清楚两者的区别.两者在整体上有着很明显的差异. 整体看来 ...
- 117.C语言实现桌面输出图片,桌面输出文字,桌面画线
通过获取窗口句柄,然后获取窗口DC,然后画图 #include <Windows.h> #include <stdio.h> //桌面画线 void drawLine() { ...
- c#下halcon配置
1.在halcon中写入算子,实现函数过程 比如: read_image(Image,'D:/MyFile/halcon/数字识别/1.jpg') decompose3(Image, ImageR, ...
- hdu5389
题意:给你n个人每一个人手里有一个id,然后给你两个数a和b.让你把n个人分为两组.条件是 一组人手里的id和等于a 另一组人的id和等于b,这里的和是指加起来之后对9取余,假设sum等于0 则sum ...
- vue的使用(一)
之前找了一个学前端的同学,给我免费做几个页面,但是后来也就杳无音信了,今天脑子发热自己学一下vue算了. 本节目标: 安装以及数据绑定 1.安装和运行 ·必须要安装nodejs,这个到网上写 ...
- Javascript和jquery事件--点击事件和触发超链接
前面的不过是一些基础的知识,真正的一些事件还是有点不同.还有一些命名空间的问题.不过现在ie也开始接受W3C标准,而且平时开发也很少考虑ie了,一些事件就不考虑ie了. 点击事件--click 大部分 ...
- IOS总结
1.Difference between shallow copy and deep copy? 浅复制和深复制的区别? 答案:浅层复制:只复制指向对象的指针,而不复制引用对象本身. 深层复制:复制引 ...
- Android, IOS 史上最强多语言国际化,不仅第一次会尾随系统,并且会保存用户的语言设置
劲爆消息,我提供源代码了.你能够先看完再下载.也能够先下载再看完, android源代码地址: https://github.com/hebiao6446/------Bluetooth-Androi ...
- java学习笔记之基础语法(二)
1.数组: 概念:同一种类型数据的集合,其实,数组就是一个容器 优点:可以方便的对其进行操作,编号从0开始,方便操作这些元素. 2,数组的格式 元素类型[]数组名=new 元素类型[数组元素个数]: ...