关于java物理存储常量池问题?

int a = 5;
int b = a;
b = b + 10;
输出a

怎样从栈堆常量池上解释?

0

2个回答

和常量池没有关系
int是简单类型,不是引用
int a = 5;
是将5这个值拷贝到a(a在堆栈上)
每个等于号都是值拷贝

注意区别 int 和 Integer

0

我感觉我可能跑题了:
1.在定义a时关系为先在静态区中找出或添加5这个值,然后在堆中创建a对象。在栈中添加a对象的引用地址。
2.b=a时拷贝在堆中创建b对象,因为是基本数据类型b对象拷贝a对应的静态区,在栈中创建b引用。
3.重新修改b对应的静态堆。b对应的静态堆时b+10,此时a对应的静态堆还为5,现在使用的静态堆有2个分别为a,b
4.输出a静态堆的值为5,输出顺序为现在栈中找出a的引用地址,然后在堆中找出a对象,然后在静态区中找出5这个值

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Java常量池详解--比较蛋疼的面试题(一)
实例一 public class test { public static void main(String[] args) { objPoolTest(); } public static void objPoolTest() { int i = 40; int i0 = 40;
堆、栈、方法区、常量池面试遇到怎么答?
结构化语言里函数(子程序)调用最方便的实现方式就是用栈,以至于现在绝大部分芯片都对栈提供芯片级的硬件支持,一条指令即可搞定栈的pop操作。栈的好处是:方便、快、有效避免内存碎片化。栈的问题是:不利于管理大内存(尤其在16位和32位时代)、数据的生命周期难于控制(栈内的有效数据通常是连续存储的,所以pop时后申请的内存必须早于先申请的内存失效),所以栈不利于动态地管理并且有效地利用宝贵的内存资源。于...
Java字符串常量池相关问题
首先,我们来熟悉字符串常量池:字符串在java程序中被大量使用,为了避免每次都创建相同的字符串对象及内存分配,JVM内部对字符串对象的创建做了一定的优化,有一块专门的区域用来存储字符串常量,该区域就是字符串常量池。字符串常量池涉及到一个设计模式,叫享元模式,所谓享元模式是说:一个系统中如果有多处用到了相同的一个元素,那么我们应该只存储一份此元素,而让所有地方都引用这一个元素。
Integer关于面试问题
public class Demo4_Integer面试题 { public static void main(String[] args) { Integer s1 = new Integer(98); Integer s2 = new Integer(23); System.out.println(s1 == s2); ...
JAVA常量池,一篇文章就足够入门了。(含图解)
前言 一直在《深入理解JVM》对常量池只有一个浅薄的了解,之前也遇到过这种题目,今天还是要挑出来进行一次全方位的了解。 常量池分类 常量池大体可以分为:静态常量池,运行时常量池。 静态常量池 存在于class文件中,比如经常使用的javap -verbose中,常量池总是在最前面把? 运行时常量池呢,就是在class文件被加载进了内存之后,常量池保存在了方法区中,通常说的常量池 值的...
Java String 常量池问题的几个例子
 下面是几个常见例子的比较分析和理解: final StringBuffer a = new StringBuffer("111");     final StringBuffer b = new StringBuffer("222");     a=b;//此句编译不通过     final StringBuffer a = new StringBuffer("111");  
Java中的几种常量池
参考https://www.zhihu.com/question/55994121 1.运行时常量池:方法区的一部分,存放编译器生成的各种字面量和符号引用,这部分内容将在类加载后进入方法区的运行时常量池。一般来说,除了保存Class文件中描述的符号引用外,还会把翻译出来的直接引用也存储到运行时常量池中。运行时常量池具备动态性,也就是并非预置入Class文件的内容才能进入方法区的运行时常量池,运行...
java的常量池问题
最近LZ在看一些博客的时候遇到一个问题,后来百度了才知道java有一个很重要的知识点,就是常量池问题。先看下面这个问题: public class T  { public static void main(String[] args)  { testFinal(); } public static void testFinal() { String s1 = "ab"; Str
Java的string类常量池及不可变性
1、String常量池     当使用new String(“hello”)时,JVM会先使用常量池来管理“hello”直接量,再调用String类的构造器来创建一个新的String对象,新创建的对象被保存在堆内存中。即new String(“hello”)一共产生了两个字符串对象。 【常量池constant pool】管理在编译时被确定并保存在已编译的.class文件中的一些数据,包括关于类
Integer 的-128至127缓存常量池记录
先说结论 Integer a=127; Integer b=127; Integer c=128; Integer d=128; a==b true c==d false Integer a=new Integer (127); Integer b=new Integer (127); Integer c=new Integer (...
《Java虚拟机原理图解》 1.2.3、Class文件中的常量池详解(下)
NO9.  类中引用到的field字段 在常量池中是怎样描述的?
字符串常量池及byte数据常量池
Byte型数据缓冲池Demo1public class BufferPoolDemo { public static void main(String[] args) { Integer i1=127; Integer i2=127; System.out.println(i1==i2); System.out.println(
java基础常见问题解析(四)堆、常量池、方法区栈与队列
堆、常量池、方法区栈与队列 在Java 中,下面关于String 类和StringBuffer 类的描述正确的是哪一个 a. StringBuffer 类的对象调用toString()方法将转化为String 类型 b. 两个类都有append()方法 c. 可以直接将字符串”test” 赋值给声明的String 类和StringBuffer 类的变量 d. 两个类的实例的值都能够改变...
Java堆、栈、方法区、常量池
1 堆与栈Java的数据根据不同的使用情况,有不同的分类,接下来先简单概括一下各种数据类别(不是类型)的内存分配情况,首先帮助区分一下java堆和java栈: 基础数据类型(Value type)直接在栈(stack)空间分配,方法的形式参数,直接在栈空间分配,当方法调用完成后从栈空间回收。 引用数据类型,需要用new来创建,既在栈空间分配一个地址空间(reference),又在堆空间分配对象的类变
每日一心得————Integer和Integer常量池
首先一道小题送上! Integer中有个静态内部类 IntegerCache ,里面有个cache[],也就是Integer常量池  大小为一个字节(-128-127). 源码送上(jdk1.8.0_101) private static class IntegerCache { static final int low = -128; static f...
字符串常量池、运行时常量池
众所周知,在JVM中栈存放对象的引用和基本类型,堆存放具体的对象和每个对象包含一个与之对应的class信息,方法区存储了每个类的信息(包括类的名称、方法信息、字段信息)、静态变量、常量以及编译器编译后的代码等。关于String常量池、常量池等又让人头大。String str = "abc"; 如此生成的字符串存放在常量池中String str = new String("abc"); 如此生成的字...
Java整数常量池
同String pool 类似的,Java中存在整数(Integer 对象,而非基本类型)pool。在Java中1字节大小以内的Integer(0-127)都是存在一个常量池中的,(不包含new Integer(xx)初始化),所以他们的引用也是相同的。1. 用等号和基本类型初始化,等效于用“=”和常量初始化,代码如下,输出如下:127之前都是相等的引用。2. 对比代码结果如下;可以看到,结果都是...
关于常量池,字符串常量池的整理
由于之前研究了一下JVM的内存划分,对里面方法区的常量池一知半解,于是想要探究一下 全局字符串池(string pool也有叫做string literal pool) 全局字符串池里的内容是在类加载完成,经过验证,准备阶段之后在堆中生成字符串对象实例,然后将该字符串对象实例的引用值存到string pool中(记住:string pool中存的是引用值而不是具体的实例对象,具体的实例对象是在...
java: 封装缓存池(int与Integer)、常量池(拘留池)、static变量 static代码块 static方法、 final变量、final 方法、final类 整理
java 内存模型: JVM主要管理两种类型内存:堆和非堆,堆内存(Heap Memory)是在 Java 虚拟机启动时创建, 非堆内存(Non-heap Memory)是在 JVM堆之外的内存  堆:对象的具体(属性 方法);  非堆区: 栈:方法执行时 在此操作,局部变量,堆中对象的地址; 静态数据区: static修饰的数据区(假设 技术不能假设!!):如果经stat
Java字符串常量池
开篇同学们面试的时候总会被问到字符串常量池的问题吧?如果你是死记硬背的答案,那么我想看了我这篇文章,你应该以后能胸有成竹了跟着Alan,走起!1. 享元模式其实常量池这个问题涉及到一个设计模式,叫“享元模式”,顾名思义 - - - > 共享元素模式也就是说:一个系统中如果有多处用到了相同的一个元素,那么我们应该只存储一份此元素,而让所有地方都引用这一个元素Java中String部分就是根据享元模式设
java中的字符串常量池,栈和堆的概念
问题:String str = new String(“abc”),“abc”在内存中是怎么分配的?    答案是:堆,字符串常量区。 题目考查的为Java中的字符串常量池和JVM运行时数据区的相关概念。 "abc"为字面量对象,其存储在堆内存中。而字符串常量池则存储的是字符串对象的一个引用。   Java中的字符串常量池 Java中字符串对象创建有两种形式,一种为字面量形式,如Stri...
Java常量池(静态常量池与运行时常量池)
 1、什么是常量用final修饰的成员变量表示常量,值一旦给定就无法改变!final修饰的变量有三种:静态变量、实例变量和局部变量,分别表示三种类型的常量。Java中的常量池,实际上分为两种形态:静态常量池和运行时常量池。    1)所谓静态常量池,即*.class文件中的常量池,class文件中的常量池不仅仅包含字符串(数字)字面量,还包含类、方法的信息,占用class文件绝大部分空间。    ...
Java中几种常量池比较
目录 class常量池 什么是字面量和符号引用 字符串常量池 字符串常量池的设计思想 字符串常量池的位置 字符串常量池内部结构 字符串常量池里放的是什么? 运行时常量池 总结 Java中主要有三种常量池,分别是class常量池、字符串常量池和运行时常量池。我们对这三个常量池进行对比。 class常量池 我们写的每一个Java类被编译之后都会生成一个对应的Class文件。Cl...
java常量池-字符串常量池、class常量池和运行时常量池
原文链接:http://tangxman.github.io/2015/07/27/the-difference-of-java-string-pool/                         在java的内存分配中,经常听到很多关于常量池的描述,我开始看的时候也是看的很模糊,网上五花八门的说法简直太多了,最后查阅各种资料,终于算是差不多理清了,很多网上说法都有问题,笔者尝试着来区分...
Java常量池理解和经典总结
Java常量池理解和经典总结 一.相关知识 1. 什么是常量。 第一种:是一个值,这个值本身,我们就叫做常量。 整型常量:1024 实型常量:1.024 字符常量:'g' 'c' 'w' 字符串常量:"gcw" 逻辑常量:true false 这只是我们平时我们的一个说法而已,比如数字1024,我们说它是一个int类型的常量。 第二种:不可变的变量,我们也称为常量。就是
Java中的常量池(字符串常量池、class常量池和运行时常量池)
简介: 这几天在看Java虚拟机方面的知识时,看到了有几种不同常量池的说法,然后我就去CSDN、博客园等上找资料,里面说的内容真是百花齐放,各自争艳,因此,我好好整理了一下,将我自认为对的理解写下来与大家共同探讨: 在Java的内存分配中,总共3种常量池:1.字符串常量池(String Constant Pool):1.1:字符串常量池在Java内存区域的哪个位置? 在JDK6.0及之前版本,字符串
Java内存管理以及常量池
Java内存管理以及常量池 Java的内存管理就是对象的分配和释放问题。在Java中,内存的分配是由程序完成的,而内存的释放是由垃圾回收器(Garbage Collection,GC)完成的,程序员不需要通过调用函数来释放内存,但它只能回收无用并且不再被其它对象引用的那些对象所占用的空间。 首先,想要了解JAVA的内存分配,就要先知道有哪些内存模块,也就是说要了解JAVA内存模型。Java虚拟...
Java常量池的大概理解
触摸java常量池      java常量池是一个经久不衰的话题,也是面试官的最爱,题目花样百出,小菜早就对常量池有所耳闻,这次好好总结一下。   理论            小菜先拙劣的表达一下jvm虚拟内存分布:        程序计数器是jvm执行程序的流水线,存放一些跳转指令,这个太高深,小菜不懂。      本地方法栈是jvm调用操作系统方法所使用
深入讲解java中.class文件中的常量池
常量池什么? 放置常量的的池,只是这个池是数组 cp_info的结构体为: tag 和info,tag标志它是什么类型的常量,info为它的内容 cp_info结构体分为两类:字面量和引用 根据tag不同有:引用:指向字面量的地址Constant_Methodref_info,Constant_Fieldref_info,Constant_Interfaceref_info,Co
java方法区和常量池
方法区:         和java堆一样,方法区也是属于线程共享的区域,存放的是java的类型信息,静态变量,运行时常量池以及jit编译后的代码等数据。         运行时常量池:     class文件中除了包含类的版本,类名,字段,方法,接口等信息,还包含了常量池,这里面存放了编译期产生的各种 字面量以及符号引用,在类加载后进入方法区的运行时常量池中,运行时常量池相对于class常...
Java Class文件中的常量池
学习JAVA虚拟机一般都看过《深入理解JAVA虚拟机》这本书,这本书的价值这里不做赘述,本文中许多东西也是参考这本书而来。 我们写的程序源码经过javac的编译会转变成class类型的文件,也被称为字节码文件,该文件记录了整个程序或者说当前这个类的所有相关信息,其中有一个很重要的部分被称为常量池。 常量池的概念和存储的内容网上或书里面写的很清楚,本文主要就是聊聊这个常量池里比较有意思的地方。
查看java常量池
编写一个简单的 java 文件 如下: public class Person{ int length = 10; int width =20;} 写道 #使用 javac 进行编译javac Person.java   #使用 javap -verbose Person 查看所有常量池    ...
Java知识:数据存储位置&常量池
1.数据存储位置 常用到的数据存储位置有下面3个,其他的也有但是作者水平差,就先总结3个方便自己记忆。        1.栈 1 基础数据类型 byte short int long float double char boolean 2 方法的形式参数,方法调用完后从栈空间回收 3 引用对象的地址,引用完后,栈空间地址立即被回收 2.堆 1 new出来的对象 2 数组
Java虚拟机几种常量池区分
Java几个常量池:全局字符串池 string poolclass文件常量池 class constant pool运行时常量池 runtime constant pool全局字符串池存放字符串实例的引用(类加载完成、验证、准备后在堆中生成),真正实例在堆中在HotSpot VM里实现string pool功能的是一个StringTable类,它是一个哈希表,里面存放驻留字符串(即双引号括起来的字...
java中常量池的概念及存在的区域
--------java中常量池的概念 在class文件中,“常量池”是最复杂也最值得关注的内容。   Java是一种动态连接的语言,常量池的作用非常重要,常量池中除了包含代码中所定义的各种基本类型(如int、long等等)和对象型(如String及数组)的常量值还,还包含一些以文本形式出现的符号引用,比如:   类和接口的全限定名;   字段的名称和描述符;   方
Java基础2:基本数据类型与常量池
本节主要介绍基本数据类型的大小,自动拆箱装箱,基本数据类型的存储方式,以及常量池的原理。 具体代码在我的GitHub中可以找到 https://github.com/h2pl/MyTech 文章首发于我的个人博客: https://h2pl.github.io/2018/04/23/javase2 基本数据类型的大小 int 32位 4字节 short 16...
Java内存区域+常量池详解
说在前面,推荐 Github地址:https://github.com/Snailclimb/Java-Guide 。(java面试) 基本问题: 介绍下 Java 内存区域(运行时数据区) Java 对象的创建过程(五步,建议能默写出来并且要知道每一步虚拟机做了什么) 对象的访问定位的两种方式(句柄和直接指针两种方式) 拓展问题: String类和常量池 8种基本类型的包装类和常量池...
java字符串常量池——字符串==比较的一个误区
起因 再一次js的json对象的比较中,发现相同内容的json对象使用==比较并不相等。 例如: var obj = {}; var obj2 = {}; console.log(obj == obj2); // 结果为false json在js中代表一个对象==比较的是对象栈中存放引用堆的地址。上面的obj和obj2创建的是两个对象地址肯定不同结果为false。 但最令我不...
JAVA常量池、栈、堆的比较
JAVA中,有六个不同的地方可以存储数据:1.寄存器:最快的存储区,位于不同于其他存储区的地方——处理器内部。寄存器的数量极其有限,所以寄存器由编译器根据需求进行分配。你不能直接控制,也不能在程序中感觉到寄存器存在的任何迹象。2. 栈:存放基本类型的变量数据和对象的引用。位于通用RAM中,但通过它的“堆栈指针”可以从处理器哪里获得支持。堆栈指针若向下移动,则分配新的内存;若向上移动,则释放那些内存...
java堆,栈,常量池最通俗易懂的图文解释
转自:http://www.iteye.com/topic/6345301.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制.2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中。)3. 堆:存放所有new出来的对象。4. 静态域:存放静态成员(static定义的)5. 常量池:存放...
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 区块链问题 ios视频开发问题