Java虚拟机运行原理

在 Java 中新建一个类Test:

class Test {int a;
}

在Main方法中创建两个 Test 对象,并给 a 赋不同的值。

写一个 exchange 方法,在方法中交换两个Test 对象,最后输出两个对象中 a 的值。

public class Main {public static void main(String[] args) {Test test = new Test();Test test1 = new Test();test.a = 1;test1.a = 2;exchange(test, test1);System.out.println(test.a + ", " + test1.a);}public static void exchange(Test a, Test b) {Test temp = a;a = b;b = temp;}
}

最后输出的结果是多少?

很神奇!交换居然失效了!

我们画个图来探究一下运行时的情况:

代码开始运行时, new 两个 Test 对象, 会创建一个栈帧放入栈中,栈帧中存着两个对象的地址,分别指向存在堆中的数据。

在运行到exchange方法时,Java 会新建一个栈帧,并把 test 和 test1 都复制一份过去。

在exchenge方法运行后:

在exchange方法运行结束后,该方法的栈帧出栈:

所以最后输出为 1, 2。

如果这样写的话最后输出结果就是2, 1了。

public class Main {public static void main(String[] args) {Test test = new Test();Test test1 = new Test();test.a = 1;test1.a = 2;Test temp = test;test = test1;test1 = temp;System.out.println(test.a + ", " + test1.a);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/771257.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SaaS模式java智慧工地源码 有演示 AI视频智能分析解决工地安监需求

SaaS模式java智慧工地源码 AI视频智能分析解决工地安监需求 有演示 智慧工地系统充分利用计算机技术、互联网、物联网、云计算、大数据等新一代信息技术,以PC端,移动端,平板端三位一体的管控方式为企业现场工程管理提供了先进的技术手段。让劳…

第四讲:隐语SecretFlow安装部署

SecretFLow安装 环境要求: Python>3.8; 操作系统:CentOS7,Anolis8,Ubuntu 18.04/20.04,macOS11.1,WSL2; 资源:>8核16GB 安装包:SecretFLow, SecretF…

如何在MySQL 8.0版本中开启远程登录

在MySQL 8.0版本中开启远程登录功能是一个相对简单的过程,主要包括几个关键步骤:登录MySQL服务器、修改用户身份验证方式、授权远程访问以及配置防火墙规则。以下是详细的操作步骤: 1. 登录MySQL服务器本地 首先,你需要以具有足…

物联网数据报表分析

随着物联网技术的迅猛发展,越来越多的企业开始将物联网解决方案应用于各个领域,从提高生产效率到优化用户体验,物联网都发挥着至关重要的作用。然而,如何有效地分析和管理物联网产生的海量数据,成为企业面临的挑战之一…

fl破解补丁下载2024FL Studio v21.1.1.3750 Crack永久下载和使用激活图文教程

FL Studio21简介 各位,大家晚上好,今天给大家带来最新最新2024水果编曲软件FL Studio 21中文版下载安装激活图文教程。我们一起先了解一些FL Studio 。FL Studio21是目前流行广泛使用人数最多音乐编曲宿主制作DAW软件,这款软件相信广大网友并…

毕业论文的问题猜想及答案整理

如果你的毕业论文是《基于YOLOV5的校园车辆车牌检测与识别系统的设计与实现》,那么在复试中,老师可能会围绕以下几个方面来提问: YOLOV5的基本原理: 你可以介绍一下YOLOV5是如何进行目标检测的吗?YOLOV5相比其他目标检…

掌握Go语言:精通Go语言范围(range),高级应用及进销存系统实战(25)

Go语言的范围(range)除了基本的遍历数组、切片、映射和通道外,还具有一些高级用法,包括: Go语言的范围高级用法 1. 使用下划线忽略索引或值 在Go语言中,使用下划线 _ 可以在范围语句中忽略索引或值&…

【c++】【STL】stack类、queue类、deque类详解及模拟

🪐🪐🪐欢迎来到程序员餐厅💫💫💫 今日主菜:stack和queue,deque类 主厨:邪王真眼 所属专栏:c专栏 主厨的主页:Chef‘s blog 这可是…

webpack-loader详解

一、loader的分类 1.pre:前置loader 2.normal:普通loader 3.inline:内联loader 4.post:后置loader 二、执行顺序 pre > normal > inline > post,相同类型的loader执行顺序为:从右到左,从下到上 module:{rules:[{enforce:"pre", …

JVM垃圾收集——概述

文章目录 1、什么是垃圾2、为什么需要垃圾收集3、如何进行垃圾收集3.1、早期垃圾收集3.2、Java垃圾收集机制 4、小结 垃圾收集(Garbage Collection,GC)并不是Java语言所独有的,早在1960年,Lisp语言中就已经开始使用内存的动态分配和垃圾收集技术。可见&a…

基于SSM框架的酒店预订系统

基于SSM框架的酒店预订系统的设计与实现 摘要 当今世界的互联网信息技术飞速发展,网络化的工作模式已经几乎覆盖到各个工作领域中的业务内,人们的日常生活也渐渐离不开互联网。因此,在当下全国各处的酒店都开始构建起了自己的网络预订系统。…

Spring Boot整合Spring Security

Spring Boot 专栏:Spring Boot 从零单排 Spring Cloud 专栏:Spring Cloud 从零单排 GitHub:SpringBootDemo Gitee:SpringBootDemo Spring Security是针对Spring项目的安全框架,也是Spring Boot底层安全模块的默认技术…

Netty学习——源码篇6 Pipeline设计原理

1 Pipeline设计原理 在Netty中每个Channel都有且仅有一个ChannelPipeline与之对应,它们的组成关系如下图: 通过上图可以看到,一个Channel包含了一个ChannelPipeline,而ChannelPipeline中又维护了一个由ChannelHandlerContext组成的…

【笔记】深入理解JVM机制

🎥 个人主页:Dikz12📕格言:吾愚多不敏,而愿加学欢迎大家👍点赞✍评论⭐收藏 目录 JVM 运⾏流程图 JVM 中内存区域划分 方法区 / 元数据区 堆 栈 程序计数器 本地方法栈 内存区域总结 JVM 中类加载过程 …

C++ STL- list 的使用以及练习

目录 0.引言 1. list 介绍 2. list 使用 2.1 构造函数 2.2 list iterator 的使用 3 list capacity 4. list element access 5. list modifiers 6. list 迭代器失效 7. list 与vector 对vector 8. OJ 题讲解 删除链表的倒数第 N 个节点: 0.引言 …

Jetson AGX ORIN 配置 FGVC-PIM 神经网络(包含 arm64 下面 torch 和 torchvision 配置内容)

Jetson AGX ORIN 配置 FGVC-PIM 神经网络 文章目录 Jetson AGX ORIN 配置 FGVC-PIM 神经网络配置 ORIN 环境创建 FGVC-PIM 虚拟环境安装 PyTorch安装 torchvision安装其他依赖包 配置 ORIN 环境 首先先配置 ORIN 的环境,可以参考这个链接: Jetson AGX …

Go第三方框架--gin框架(一)

序言 Gin框架作为go语言使用最多的web框架,以其快速的响应速度和对复杂http路由配置的支持受到程序员和媛们的喜爱,几乎统治了web市场。但作为一名合格的程序员,要知其然更要知其所以然,不然八股文背的也没有啥意思。本着这个原则…

JavaScript中的Lexical Environment

概要 本文主要介绍JavaScript中的一个重要概念Lexical Environment,它可以帮助我们解释我们为什么可以通过嵌套方法,共享数据,以及为什么可以在函数中定义一个和全局变量同名的变量,并且不会影响到全局变量。 基本分析 基本概念…

28377s使用的记录和注意点(1)

28377s使用的记录和注意点(1)_dsp28377设置复位不清除ram区域-CSDN博客

SUB-1G替代CMT2380F32 SOC芯片DP4306F 32 位ARM Cortex-M0+内核应用无线遥控工控设备智能家居

DP4306F是一款高性能低功耗的单片集成收发机,集成MO核MCU,工作频率可覆盖200MHiz^ 1000MHz。 支持230/408/433/470/868/915频段。该芯片集成了射频接收器、射频发射器、频率综合器、GFSK调制器、GFSK解调器等功能模块。通过SPI接口可以对输出功率、频道选…