a = 3中的3在栈中还是堆中?

1、栈区(stack)

由编译器自动分配释放,存放函数的参数值,局部变量的值等。

2、堆区(heap)

是一个可动态申请的内存空间(其记录空闲内存空间的链表由操作系统维护),在java中,所由使用new xxx()构造出来的对象都在堆中存储一般由程序员分配释放。

3、常量池

存放字符串常量和基本类型常量(public static final)

常量池的好处是为了避免频繁的创建和销毁对象而影响系统性能,其实实现了对象的共享。

4、变量

诸如int a = 3; long b = 255L;(L必须加,不加默认是int类型)的形式来定义,称为自动变量即变量。

值得注意的是,这里的a是一个指向int类型的引用,指向3这个字面值。这些字面值的数据,由于大小可知,生存周期可知(这些字面值固定定义在某个程序块里,程序块退出后,字段值就消失了),出于追求速度的原因,就存在于栈中。

另外,栈有一个很重要的特殊性,就是存在栈中的数据可以共享

假设我们同时定义:

int a = 3;

int b =3;

编译器首先会处理 int a = 3,首先它会在栈中创建一个变量为a的引用,然后查找有没有字面值为3的地址,没找到,就开辟一个存放3这个字面值的地址,然后将a指向3的地址。接着处理 int b = 3;在创建完b这个引用变量后,由于在堆中已经有3这个字面值,便将b直接指向3的地址。这样,就出现了a与b同时均指向3的情况

【上文提到了“引用+数值+内存地址”这个三个名字,其中变量名就是引用,给变量赋的值就是数值,而所提到的内存是抽象的内容,让引用指向的不是数值,而是存存数值的那块内存地址】

定义完a与b的值后,再令a = 4;那么,b不会等于4,还是等于3。在编译器内部,遇到值4时,它就会重新搜索堆中是否有4的字面值,如果没有,重新开辟地址存放4的值;如果已经有了,则直接将a指向这个地址。因此a值的改变不会影响到b的值。

【定义变量,给变量赋值,然后在编译的过程中就可以将其保存在内存中了。】

经过官方文档考察,各方求证,int a = 3存储到栈还是堆中?其实变量a 和值3都存储在栈中,JVM内存模型如下:

更具体的来说是存储到虚拟机栈,将数值3存储到操作数栈,将变量a存储到局部变量表栈

                                                                                                            @精彩好文章推荐人——康宁

                                                                                                                       人生在于勤,志达天下

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

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

相关文章

基于js css的瀑布流demo

要实现照片按照瀑布流展示&#xff0c;写个小demo&#xff0c;记录下。 瀑布流实现思路如下&#xff1a; CSS 弹性布局对 3 列按横向排列&#xff0c;对每一列内部按纵向排列 html代码&#xff1a; <div class"content"></div> css代码&#xff1a; …

基于SSM学生信息管理系统

采用技术 基于SSM学生信息管理系统的设计与实现~ 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringMVCMyBatis 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 页面展示效果 总体功能设计 登录页面 后台首页 学生信息页面 添加学生用户 编辑…

go | channel direction、channel sync、channelbuffer

go 中的管道通信 管道通信直连&#xff0c;管道的特点就是单工&#xff0c;一方只能接受/发送 package main import ("fmt" )func ping(pings chan<- string, msg string){pings <- msg }/*函数pong中 参数pings 是一个接收通道&#xff08;只能从管道接收数据…

第三十六章 管理和监控Web网关

文章目录 第三十六章 管理和监控Web网关检查系统状态IRIS的连接 IRIS 服务器表应用程序路径表 第三十六章 管理和监控Web网关 本页介绍如何通过Web网关管理页面管理和监控系统间Web网关。 检查系统状态 系统状态选项显示所有活动连接的状态。必须是系统管理员才能使用此功能…

动态规划刷题(算法竞赛、蓝桥杯)--导弹拦截(线性DP)

1、题目链接&#xff1a;[NOIP1999 提高组] 导弹拦截 - 洛谷 #include <bits/stdc.h> using namespace std; const int N2e55; int a[N],x,n; int b[N],len;int main(){while(cin>>x)a[n]x;//求最长不上升子序列 b[0]2e9;//初始化为无穷大for(int i1;i<n;i){if(…

C++(9): std::stack的使用

std::stack 是 C 标准模板库&#xff08;STL&#xff09;中的一个容器适配器&#xff0c;它提供了后进先出&#xff08;LIFO&#xff09;的数据结构。作为适配器&#xff0c;std::stack 基于其他容器&#xff08;默认是 std::deque&#xff0c;但也可以指定为 std::vector&…

计算机专业在找工作时的注意事项

目录 说在前面关于我一些忠告关于简历关于银行写在最后 说在前面 满满的求生欲。我不是什么大佬&#xff0c;更没有能力教大家什么。只是看到有不少学弟学妹&#xff0c;还在为找一份工作焦头烂额&#xff0c;却没有努力的方向。所以这里斗胆给计算机相关专业的学弟学妹们的一…

C# 多线程编程:线程锁与无锁并发

文章目录 前言一、锁的基本概念1.1 什么是锁&#xff1f;1.2 为什么需要锁&#xff1f;1.3 锁的作用原理 二、线程锁的类型2.1 自旋锁&#xff08;Spin Lock&#xff09;2.2 互斥锁&#xff08;Mutex&#xff09;2.3 混合锁&#xff08;Hybrid Lock&#xff09;2.4 读写锁&…

【Python百日进阶-Web开发-Peewee】Day290 - Peewee 的扩展(十)架构迁移(下)/ 映射

文章目录 13.16.3 迁移 APImigrateclass SchemaMigrator(database&#xff09;class PostgresqlMigratorclass SqliteMigratorclass MySQLMigrator 13.17 映射 Reflectiongenerate_modelsprint_modelprint_table_sqlclass Introspectorclassmethod from_database 13.18 数据库网…

进程知识点

引用的文章&#xff1a;操作系统——进程通信&#xff08;IPC&#xff09;_系统ipc-CSDN博客 面试汇总(五)&#xff1a;操作系统常见面试总结(一)&#xff1a;进程与线程的相关知识点 - 知乎 (zhihu.com) 二、进程的定义、组成、组成方式及特征_进程的组成部分必须包含-CSDN博…

江协科技STM32:按键控制LED光敏传感器控制蜂鸣器

按键控制LED LED模块 左上角PA0用上拉输入模式&#xff0c;如果此时引脚悬空&#xff0c;PA0就是高电平&#xff0c;这种方式下&#xff0c;按下按键&#xff0c;引脚为低电平&#xff0c;松下按键&#xff0c;引脚为高电平 右上角PA0&#xff0c;把上拉电阻想象成弹簧 当按键…

大数据手写面试题Scala语言实现大全(持续更新)

在大数据领域,Scala语言因其强大的函数式编程特性和对并发处理的良好支持而成为了开发者们的热门选择。有些面试官,为了考验面试者的基本功,需要让手写一些面试题,以数据结构和算法类的居多。本文将为您提供一些常见的Scala手写面试题及参考答案,帮助您在面试或工作中更好…

C# 命名空间的两种定义哦写法与区别

这两种写法在C#中都是有效的&#xff0c;但是它们代表了不同的语法风格和C#版本特性。 第一种写法&#xff1a; namespace Nebula.PDF; public class PdfDocument {}这是C# 9.0及更高版本中引入的顶级语句&#xff08;top-level statements&#xff09;特性。它允许你直接在文…

c++中的菱形继承

c中的菱形继承 class Animal { public:int m_age; }; class Sheep:public Animal {}; class Tuo:public Animal{}; class SheepTuo :public Sheep , public Tuo{}; SheepTuo st; st.m_age 18; m_age是谁的无法区分 class Animal { public:int m_age; }; class Sheep:virtua…

ES的集群节点发现故障排除指南(3)- end

本文是ES官方文档关于集群节点发现与互联互通的问题排查指南内容&#xff0c;第三部分&#xff0c;结束。 原文参考及相关内容&#xff1a; 英文原文&#xff08;官网&#xff09; 第一部分-&#xff08;1&#xff09; 第二部分-&#xff08;2&#xff09; 节点无法发现或…

李宏毅【生成式AI导论 2024】第5讲 让语言模型彼此合作,把一个人活成一个团队

GPD4,它也有非常强大的能力。但是GPT4如果跟其他的语言模型合作,他们其实可以发挥1加1大于二的力量。 为什么要让模型合作? 那怎么让模型彼此合作呢?有很多不同的方式。一个可能性是假设你现在手边就有一堆语言模型,他们可能有不同的能力使用,他们可能有不同的成本局来…

国外的Java面试题和国内的相比谁更卷

前言 有很多朋友很好奇国外的Java面试题长啥样&#xff0c;今天我们就去找5道国外的面试来和国内的对比一下看看谁难一些&#xff01; 面试题分享 1. Is Java Platform Independent if then how?&#xff08; Java平台是独立的吗&#xff1f;&#xff09; Yes, Java is a…

[数据结构]插入和希尔排序

一、插入排序 插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴&#xff0c;但它的原理应该是最容易理解的了&#xff0c;因为只要打过扑克牌的人都应该能够秒懂。插入排序是一种最简单直观的排序算法&#xff0c;它的工作原理是通过构建有序序列&#xff0c;对于未排…

Protocol Buffers(通常简称为protobuf)是一种由Google开发的用于序列化结构化数据的接口描述语言

Protocol Buffers&#xff08;通常简称为protobuf&#xff09; protobuf是一种由Google开发的用于序列化结构化数据的接口描述语言。它可以用于通信协议、数据存储等领域。以下是protobuf的一些重要特点和概念&#xff1a; IDL&#xff08;接口描述语言&#xff09;&#xff1…

win10微软拼音输入法 - bug - 在PATH变量为空的情况下,无法输入中文

文章目录 win10微软拼音输入法 - bug - 在PATH变量为空的情况下&#xff0c;无法输入中文概述笔记实验前提条件100%可以重现 - 无法使用win10拼音输入法输入中文替代的输入法软件备注END win10微软拼音输入法 - bug - 在PATH变量为空的情况下&#xff0c;无法输入中文 概述 在…