基本数据和引用数据参数传递过程

案例1:判断程序的输出结果


class Demo{
public static void main(String[] atgs){
int x =4;
show(x);
System.out.println("x="+x); // 最终输出: x=4
} public static void show(int x){
x = 5;
} }

执行过程第1步:主函数main()方法压栈,内部变量x赋值为4。

第2步:show()方法压栈,在show()方法中,有一个局部变量x,注意,此 X 非main()中的 x。

第3-4步:show()方法内部的x被main函数中的x赋值为4。

第5步:show()方法执行最后的return(代码省略不写);show()方法弹栈。

第6步:此时栈内还剩main()方法,main()方法内部该执行输出语句了,此时main()方法中只有一个 x,且 x 的值为4,故输出:x=4。

第7步:主函数执行return,程序执行结束。

类似地,


class Demo{
public static void main(String[] args){
int x =4;
show(x);
System.out.println("x="+x); // 最终输出: x=4
} public static int show(int x){
x = 5;
return x;
} }

在show()方法中添加返回值,将x返回,此时输出结果仍为4。

因为 return x 该语句将x的值5返回给了主函数的show()中,但是并没有用,并没有进行再赋值,所以输出结果仍为x=4。

案例2



class Demo{
int x;
public static void main(String[] args){
Demo d = new Demo();
d.x = 5;
show(d);
System.out.println("x="+d.x);
} public static void show(Demo d){
d.x = 6;
} }

第1步:main()方法进栈,Demo d = new Demo() 该语句分为两部分执行,先执行右边,先在堆内存中开辟空间,其成员变量x默认值为0。

第2步:将开辟的堆内存空间的地址赋值给main()方法中的d,此时d指向0x45该地址。

第3步:执行d.x = 5,用d持有的地址去寻找对象,把对象中的x赋值为5。

第4步:show()方法压栈,将main()方法中的d的值赋给show()方法中的d,此时二者(main()方法和show()方法中的d)所持有的地址相同,均指向堆内存中的0x45地址所代表的对象。

第5步:执行show()方法中的 d.x = 6,将 show()方法中d指向的对象中的x值赋值为6。

第6步:show()方法执行完毕,弹栈。

第7步:执行main()方法中的输出语句,因为前面main()和show()方法中d指向的对象是同一个,所以此时对象中的x的值已经成为6,所以输出为:x=6。

如果,将show()方法稍作更改,代码如下



class Demo{
int x;
public static void main(String[] args){
Demo d = new Demo();
d.x = 5;
show(new Demo());
System.out.println("x="+d.x);
} public static void show(Demo d){
d.x = 6;
} }

最后输出结果为x=5。因为在内存中创建了两个对象,而最终输出的对象的x值为5。

JAVA中关于基本数据和引用数据参数传递过程的更多相关文章

  1. Java中的基本类型和引用类型变量的区别

    Java中的基本类型和引用类型变量的区别   学了一年多,说实话你要我说这些东西我是真说不出来是啥意思     基本类型: 基本类型自然不用说了,它的值就是一个数字,一个字符或一个布尔值. 引用类型: ...

  2. JavaSE基础(十)--Java中的基本数据类型转换

    Java中的基本数据类型转换 说基本数据类型转换之前,先了解下 Java 中的 8 种基本数据类型,以及它们的占内存的容量大小和表示的范围,如下图所示. 重新温故了下原始数据类型,现在来解释下它们之间 ...

  3. 关于Java中的基本数据类型转换

    Java中的基本类型有四种,其中整型分为byte.short.int.long,浮点型分为float.double,字符型char,布尔型boolean.8种类型的级别由低到高byte->sho ...

  4. JAVA中MESSAGEBOX,静态类直接引用

    原文:JAVA中MESSAGEBOX,静态类直接引用 package cisdi.mes.wrm.mcode.serviceImpl; import javax.persistence.Entity; ...

  5. JAVA中的四种引用以及ReferenceQueue和WeakHashMap的使用示例

    简介: 本文主要介绍JAVA中的四种引用: StrongReference(强引用).SoftReferenc(软引用).WeakReferenc(弱引用).PhantomReference(虚引用) ...

  6. Java中的四种引用

    引用定义 实际上,Java中存在四种引用,它们由强到弱依次是:强引用.软引用.弱引用.虚引用.下面我们简单介绍下这四种引用: 强引用(Strong Reference):通常我们通过new来创建一个新 ...

  7. 在JAVA中怎么比较Double类型数据的大小

    在JAVA中怎么比较Double类型数据的大小  我来答  浏览 33044 次   3个回答 #活动# “双11”答题活动,奖励加码!最高得2000元购物礼金! pollutedair 2015- ...

  8. Java中new一个对象是一个怎样的过程?JVM中发生了什么?

    Java中new一个对象的步骤: 1. 当虚拟机遇到一条new指令时候,首先去检查这个指令的参数是否能 在常量池中能否定位到一个类的符号引用 (即类的带路径全名),并且检查这个符号引用代表的类是否已被 ...

  9. Java中值传递和引用传递的区别

    在Java中参数的传递主要有两种:值传递和参数传递: 下面是对两种传递方式在内存上的分析: 一:值传递 解释:实参传递给形参的是值  形参和实参在内存上是两个独立的变量 对形参做任何修改不会影响实参 ...

随机推荐

  1. (六)、mkdir--创建目录make directory

    一.命令详解与命令格式 在文件系统中创建新的目录, 格式:mkdir   [-选项]   目录名 目录名既可以是相对路径名,也可是相对路径名 选项: -p或者--parent,创建指定路径中所有不存在 ...

  2. WEB层知识点

    目录 Web 应用程序技术 HTTP 1.1 HTTP请求 1.2 HTTP响应 1.3 HTTP方法 1.4 URL 1.5 HTTP消息头 1.常用消息头 2.请求消息头 3.响应消息头 1.7 ...

  3. Qt学习笔记-启动一个额外的应用程序-获取输入的回车信号

    现在让我们的程序模拟windows下的运用程序. 在命令行中输入命令.点击确定即可运行系统中的程序. 添加头文件#include <QProcess> 在确定按钮的响应函数中写上功能要求. ...

  4. Spring Cloud Hystrix应用篇(十一)

    一.背景 分布式系统环境下,服务间类似依赖非常常见,一个业务调用通常依赖多个基础服务.如下图,对于同步调用,当库存服务不可用时,商品服务请求线程被阻塞,当有大批量请求调用库存服务时,最终可能导致整个商 ...

  5. 常用的Git命令清单

    目录 名词解释 开卷必读 一. 新建代码库 二.配置 三. 忽略某个文件的改动 四. 增加/删除文件 五. 代码提交 六. 分支 七. 标签 八. 查看信息 九. 远程同步 十. 撤销 十一. Git ...

  6. 最实用的visual studio插件,值得收藏!

    1.ReSharper(VS必装,代码重构.代码修正功能) ReSharper 是一个JetBrains公司出品的著名的代码生成工具.其能帮助Microsoft Visual Studio成为一个更佳 ...

  7. centos7.5安装Oracle11gR2

    centos7.5安装Oracle11gR2 说明:由于上一台旧的笔记本电脑(CPU:i5-7200,内存:8G,硬盘:128SSD+1T机械)卸任,所以打算在家搭建一个个人服务器(主要是换不锈钢盆不 ...

  8. Redis核心原理-简单动态字符串SDS

    SDS简介 Redis是C语言编写的,但没有使用c语言的字符串结构,而是自己实现了一套简单动态字符串 simple dynamic string 简称SDS,SDS兼容C语言的字符串类型,原理类似Ja ...

  9. uber_go_guide解析(三)(规范)

    前言 一主要讲的是容易忽略的错误,可能在build时都不会体现出来但是在使用时出现问题 二主要讲的是一些可以提高代码效率的用法 本篇则讲解一些规范,不是强制的但是根据规范会提高代码的可读性, 减少BU ...

  10. Docker 介绍和安装(一)

    # 下载阿里云的 Centos7 的docker.repo # step 1: 安装必要的一些系统工具 sudo yum install -y yum-utils device-mapper-pers ...