首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

integer常量在哪_java 常量

目录 常量 Integer a= 127 与 Integer b = 127相等吗 ---- 常量 java中存在字符串常量,维护了所有String对象 使用String s=”zx”的时候是使用...String.valueOf(“zx”)从常量池中找了个对象返回 如果不存在则将内容放入常量池中 在使用new的时候是直接创建一个新的对象在堆中 Integer中也有常量 其中缓存了-128到127之间的数字...如果整型字面量的值在-128 到 127 之间,那么自动装箱时不会 new 新的Integer 对象,而是直接引用Integer常量池中的 Integer 对象,超过范围 a1==b1...System.out.println(b == c); // true //如果整型字面量的值在-128到127之间, //那么自动装箱时不会new 新的Integer 对象, //而是直接引用常量池中的

86220

Java常量(静态常量与运行时常量

今天说一说Java常量(静态常量与运行时常量)[通俗易懂],希望能够帮助大家进步!!! 1、什么是常量 用final修饰的成员变量表示常量,值一旦给定就无法改变!...final修饰的变量有三种:静态变量、实例变量和局部变量,分别表示三种类型的常量。 Java中的常量,实际上分为两种形态:静态常量和运行时常量。...2)而运行时常量,则是jvm虚拟机在完成类装载操作后,将class文件中的常量载入到内存中,并保存在方法区中,我们常说的常量,就是指方法区中的运行时常量。...3、方法区中的运行时常量 运行时常量是方法区的一部分。...运行时常量相对于CLass文件常量的另外一个重要特征是具备动态性,Java语言并不要求常量一定只有编译期才能产生,也就是并非预置入CLass文件中常量的内容才能进入方法区运行时常量,运行期间也可能将新的常量放入池中

1.9K21
您找到你想要的搜索结果了吗?
是的
没有找到

Java中的常量【Class常量、运行时常量、字符串常量

Class常量 什么是Class常量?...运行时常量存在于内存中,是方法区的一部分。它是Class常量被加载到内存之后的版本。...运行时常量相对于Class文件常量的另一个重要特征是具备动态性,Java语言并不要求常量一定只在编译期才能产生,也就是说,并非预置入Class文件中常量的内容才能进入方法区运行时常量,运行期间也可以将新的常量放入池中...字符串常量 字符串常量在Java内存区域的哪个位置? 在JDK6.0及之前的版本,字符串常量是放在Perm Gen区(也就是方法区)中; 在JDK7.0版本,字符串常量被移到了堆中。...字符串常量是什么?

1.4K20

Jvm常量、运行时常量、字符串常量理解

常量 是.class文件的常量,也可以理解为一张表,虚拟机指令根据这张常量表找到要执行的类名,方法名,参数类型,字面量等信息 运行时常量 常量是*.class文件中的,当该类被加载,它的常量信息就会放入运行时常量...,并把里面的符号地址变为真实地址 常量只有类文件在编译的时候才会产生,而且是存储在类文件中的。...而运行时常量是在方法区,而且可在JVM运行期间动态向运行时常量池中写入数据。...当字符串常量池中的存储比较多的字符串时,会导致hash冲突,从而每个节点形成长长的链表,导致性能下降。所以在使用字符串常量时,一定要控制容量。...s3=s6输出true 简单介绍intern方法,可以使用intern方法,主动将串池中还没有的字符串对象放入字符串常量 通过intern方法主动将s4的字符串放入了字符串常量,将这个字符串对象尝试放入串

1.3K30

jvm字符串常量_java 常量

常量 class常量 Java源文件编译之后得到的class文件,其中有项信息就是常量,保存有字面量和符号引用,比如 public class JvmClass1 { final int b=...c=”java”; String d=”abcd”; String e=”java”; String f=new String(“java”); } } 运行时常量 && 字符串常量 class常量被加载到内存后...,形成了运行时常量,Jdk1.7之前位于方法区中,Jdk1.8之后是放在元空间,或者把元空间看做是新的方法区。...运行时常量相对于class常量的一个特点是具有动态性,Java不要求所有常量在编译器产生,可以在运行时产生常量加入常量,例如String类的intern()。...意思是当一个字符串对象调用intern方法,如果池中已经存在值相等(通过String的equal函数比较)的字符串常量,就返回常量池中的常量,也就是堆中对应实例的引用。否则将这个字符串加入常量

49320

JAVA-常量常量

文章目录 1.常量 2.Java常量 2.1. 静态常量: 2.2....运行时常量: 3.基本数据类型包装类常量 4.java字符串常量 1.常量 常量表示程序运行过程种不可改变的值,主要作用如下: 1.代表常数,便于程序的重构和修改。...java的常量可做如下分类: 2.1. 静态常量: 即*.class文件中的常量,class文件中的常量不仅仅包含字符串(数字)字面量,还包含类、方法的信息,占用class文件绝大部分空间。...运行时常量: 是jvm虚拟机在完成类装载操作后,将class文件中的常量载入到内存中,并保存在方法区中,我们常说的常量,就是指方法区中的运行时常量。 运行时常量是方法区的一部分。...运行时常量相对于CLass文件常量的另外一个重要特征是具备动态性,Java语言并不要求常量一定只有编译期才能产生,也就是并非预置入CLass文件中常量的内容才能进入方法区运行时常量,运行期间也可能将新的常量放入池中

1.8K30

JVM常量

中就包含文件常量(非运行时常量),在编译期间就确定了,.class文件遵循jvm虚拟机规范....,他们的字面量不会存在于常量。...将字节流的静态存储结构转化成方法区的运行时数据结构 class文件常量进入运行时常量,所有类共同使用一个运行时常量,在进入运行时常量的过程中,多个class常量池中相同的字符串,只会在运行时常量存在一份...class文件常量的大部分数据会被加载到运行时常量。 运行时常量相比于class文件常量具有动态性,运行时常量的内容不全部来自于class文件常量,可以通过代码生成的方式加入到里面。...字符串常量 1.字符串创建的两种方式 String rumenz1="入门"; String rumenz2=new String("小站"); 入门在编译期间就已经确定,会进入字符串常量,但是字符串常量只会保存一个引用

36300

JVM常量

中就包含文件常量(非运行时常量),在编译期间就确定了,.class文件遵循jvm虚拟机规范....,他们的字面量不会存在于常量。...将字节流的静态存储结构转化成方法区的运行时数据结构 class文件常量进入运行时常量,所有类共同使用一个运行时常量,在进入运行时常量的过程中,多个class常量池中相同的字符串,只会在运行时常量存在一份...class文件常量的大部分数据会被加载到运行时常量。 运行时常量相比于class文件常量具有动态性,运行时常量的内容不全部来自于class文件常量,可以通过代码生成的方式加入到里面。...字符串常量 1.字符串创建的两种方式 String rumenz1="入门"; String rumenz2=new String("小站"); 入门在编译期间就已经确定,会进入字符串常量,但是字符串常量只会保存一个引用

24400

JVM - Class常量 || 运行时常量

Pre JVM - 深入剖析字符串常量 JVM - 基本类型的包装类和对象 ---- class常量 Class常量我们可以理解为是Class文件中的资源仓库。...Class文件中主要由两大部分 类的版本、字段、方法、接口等描述信息外, 常量(constant pool table),用于存放编译期生成的各种字面量(Literal)和符号引用(Symbolic...这里面主要是两个东西; 字面量和符号引用 ---- 字面量 么错 就是你想的那个意思: 由字母、数字等构成的字符串或者数值常量 。...主要包括了以下三类常量: 类和接口的全限定名 字段的名称和描述符 方法的名称和描述符 刚刚上面的代码 a、b 、c、d就是字段名称,就是一种符号引用, 类的全限定名也是符号引用, 类中的方法名称,()是一种...---- 运行时常量 class常量现在是静态信息,只有到运行时被加载到内存后,这些符号才有对应的内存地址信息,这些常量一旦被装入内存就变成运行时常量,对应的符号引用在程序加载或运行时会被转变为被加载到内存区域的代码的直接引用

24020

java 常量和运行时常量_常量在jvm的哪个部分

前言 一直在《深入理解JVM》对常量只有一个浅薄的了解,之前也遇到过这种题目,今天还是要挑出来进行一次全方位的了解。 常量分类 常量大体可以分为:静态常量,运行时常量。...静态常量 存在于class文件中,比如经常使用的javap -verbose中,常量总是在最前面把?...运行时常量呢,就是在class文件被加载进了内存之后,常量保存在了方法区中,通常说的常量 值的是运行时常量。...所以呢,讨论的都是运行时常量 字符串常量 最最最流行的、最典型的就是字符串了 典型范例: String a = "abc"; String b = new String("abc"); System.out.println...,通过实际的例子和绘图来熟悉了下字符串常量和包装类的常量的使用。

34530

class文件常量与运行时常量_java运行时常量

接下来就是说明常量的个数了。代表着常量池中有多少个常量,由于常量池中的常量数量不确定,所以才会有这个数据项。...这里所指的常量与JAVA代码中所说的常量有所不同,这里的常量主要包括字面量和符号引用,这两个概念很好理解。 字面量跟JAVA代码中的常量概念类似,如字符串、常量的值等等。...紧接着常量数量之后的便是常量表了。刚刚也说了,每个表都会有一个一个字节的标志位,那么常量数量0x002E之后一个字节便是0x0A,这个就是标志位,十进制是10,查表可知是个方法的符号引用。...11项常量和28项常量,我们这里就通过工具来看了。...找到第11项常量,查看11项常量的表结构,继续使用刚刚那样的寻找方法,一直找到标志位为1的常量项,也就是CONSTANT_Utf8_info的表结构,这样就可以得出我们最开始查看的那个表结构的一些具体信息了

37820

字符串常量_字符串常量溢出

JVM为了提高性能和减少内存的开销,在实例化字符串的时候进行了一些优化:使用字符串常量。...每当我们创建字符串常量时,JVM会首先检查字符串常量,如果该字符串已经存在常量池中,那么就直接返回常量池中的实例引用。如果字符串不存在常量池中,就会实例化该字符串并且将其放到常量池中。...由于String字符串的不可变性我们可以十分肯定常量池中一定不存在两个相同的字符串(这点对理解上面至关重要)。 Java中的常量,实际上分为两种形态:静态常量和运行时常量。...所谓静态常量,即*.class文件中的常量,class文件中的常量不仅仅包含字符串(数字)字面量,还包含类、方法的信息,占用class文件绝大部分空间。...而运行时常量,则是jvm虚拟机在完成类装载操作后,将class文件中的常量载入到内存中,并保存在方法区中,我们常说的常量,就是指方法区中的运行时常量

53940

java常量在方法区还是堆_JAVA常量

所以,最终的测试结论: 结论:这个常量(特指字符串常量而不是所有的常量),应该还是在Java heap里面, 上面的测试只能证明:jdk1.8中 字符串常量是在堆里面。...JAVA的三种常量 此外,Java有三种常量,即字符串常量(又叫全局字符串)、class文件常量、运行时常量。 1....字符串常量(也叫全局字符串、string pool、string literal pool) 字符串常量 Interned Strings 2....每个类都有一个运行时常量 3. class文件常量(class constant pool) class常量是在编译后每个class文件都有的,class文件中除了包含类的版本、字段、方法、接口等描述信息外...*字面量就是我们所说的常量概念,如文本字符串、被声明为final的常量值等。 按照这个分析的话, 运行时常量和静态常量存放在元空间中,而字符串常量依然存放在堆中。

2.7K20

常量-JVM(十九)

Arthas & GC日志-JVM(十八) 今 日 一 码 一、常量 常量主要放两大类:字面量和符号引用。 字面量就是由字母、数字等构成的字符串或者数值常量。 符号引用主要包含三类常量。...二、字符串常量 Jkd1.6之前:有永久代,运行时常量在永久代,运行时常量池里包含字符串常量。 Jdk1.7:有永久代,但逐步去掉永久代,字符串常量从运行时常量分离到堆里。...Jdk1.8之后:无永久代,运行时常量在元空间,字符串常量还在堆里。...2、实际操作 String s = “zhangsan”; 这时候s指向字符串常量的引用。使用的时候先会去字符串常量equals比较,一样则直接返回,不一样才会放入字符串缓冲区。...这种方法会保证字符串常量和堆都有这个对象,没有就创建,最后返回堆内存中对象引用。 先去字符串常量创建字符串对象,再去堆里创建字符串对象“zhangsan”, 最后直接将内存中的引用返回。

17220

触摸Java常量

Java中的常量,实际上分为两种形态:静态常量和运行时常量。...所谓静态常量,即*.class文件中的常量,class文件中的常量不仅仅包含字符串(数字)字面量,还包含类、方法的信息,占用class文件绝大部分空间。...而运行时常量,则是jvm虚拟机在完成类装载操作后,将class文件中的常量载入到内存中,并保存在方法区中,我们常说的常量,就是指方法区中的运行时常量。...以上所讲仅涉及字符串常量,实际上还有整型常量、浮点型常量等等,但都大同小异,只不过数值类型的常量不可以手动添加常量,程序启动时常量池中的常量就已经确定了,比如整型常量池中的常量范围:-128~127...接下来就是常量入口,入口处用2个字节标识常量常量数量,本例中数值为00 1A,翻译成十进制是26,也就是有25个常量,其中第0个常量是特殊值,所以只有25个常量

1.1K10

常量之字符串常量String.intern()

运行时常量是方法区(PermGen)的一部分。 需要提前了解: 1. JVM内存模型。 2....JAVA对象在JVM中内存分配 常量的好处 常量是为了避免频繁的创建和销毁对象而影响系统性能,其实现了对象的共享。 Java的自动装箱中其实就使用到了运行时常量。...详见:Java 自动装箱与拆箱的实现原理 还有字符串常量。 字符串进入到常量的两种方法: 1. new String()的实例调用intern()方法。     ...Paste_Image.png 如图中,我们可以看到常量位于方法区(PermGen),常量池中引用的字符串实例也在常量池中。...JDK1.7-JDK1.8常量池内存模型 ? Paste_Image.png 如图中,我们可以看到常量位于方法区(PermGen),但常量引用的字符串实例在堆中。

1.1K70

Class常量、运行时常量、字符串常量的一些思考

Class常量、运行时常量、字符串常量 class常量 java代码经过编译之后都成了xxx.class文件,这是java引以为傲的可移植性的基石。...class文件中,在CAFEBABE、主次版本号之后就是常量入口了,入口是一个u2类型的数据,也就是占据2个字节,用来给常量的容量计数,假设这个u2的数字为0x0016,那么对应十进制为22,那么常量池中右...也就是说class常量=运行时常量,只不过是不同的表现形式而已,一个是静态的,一个是动态的,其中静态的符号引用也都在运行时被解析成了动态的直接引用。...那么运行时常量是和类绑定的,每个类、接口有自己的运行时常量,每一个运行时常量的内存是在方法区进行分配的,这只是概念上的方法区,每个虚拟机有自己的实现,同一个虚拟机不同的版本也有不同的实现,以常用的...)永久代属于GC heap的一部分 在1.7字符串常量被从方法区拿到了堆,运行时常量还留在方法区中 在1.8中hotspot移除了永久代用元空间取代它,字符串常量还在堆中,而运行时常量依然在方法区也就是元空间

27120

JVM-常量

JVM-常量 JVM中的常量通常是对静态常量、字符串常量、运行时常量的总称 静态常量 存在于.class文件中,存放类的版本、字段、方法、接口的信息,同时还存放俩大常量:字面量(如字符串...、申明为final类型的值)、符号引用,这部分将在类加载后进入方法区的运行时常量存放。...总结下就是:静态常量即是存在于.class文件中的的常量,即编译时期 运行时常量 JVM在完成类的加载之后,将class文件中的常量放入方法区(1.8元空间),其中包括静态常量池中的字面量和符号引用...运行时常量相对于class文件常量(即静态常量)的另外一个特性是具备动态性,java语言并不要求常量一定只有编译器才产生,也就是并非预置入class文件中常量的内容才能进入方法区运行时常量,运行期间也可能将新的常量放入池中...字符串常量 静态常量池中的字符串在类加载完成后会存放字符串常量池中,JDK1.7之前,字符串常量存在于方法区,1.7迁移到堆中。同时迁入到堆的还有静态变量。1.8方法区改朝换代为元空间

23430
领券