美文网首页
字面量与常量池

字面量与常量池

作者: 蓝调_4f2b | 来源:发表于2022-11-26 16:39 被阅读0次

1. 字面量

字面量就是指由字母、数字等构成的字符串或者数值常量。字面量只可以右值出现,所谓右值是指等号右边的值,
如:int a=1这里的a为左值,1为右值。
在这个例子中1就是字面量。

2. 符号引用

符号引用包括三种类型:
(1)类与接口的全限定名
(2)字段名称与描述符
(3)方法名称与描述符
常量池中的静态信息,只有被加载到内存中后,才被赋予对应的内存地址。此时这些常量池变为运行时常量池,对应的符号引用在程序加载或运行时会被转变为直接引用,也称为动态链接。

3. 字符串常量池

JVM为了提高性能和减少内存开销,在实例化字符串常量的时候进行了一些优化。
(1)为字符串开辟一个字符串常量池,类似于缓存区。
(2)创建新的字符串常量时,先从缓存池中查询是否有该字符串缓存。
(3)存在该字符串,返回引用实例,不存在,实例化该字符串并放入池中。

4. 不同种字符串的操作

(1)直接赋值字符串

String test = "test";

创建过程:先到常量池中查询是否有test这个字符串,有则直接返回引用。若没有,则在常量池中创建该值,并返回引用。
(2)通过初始化String对象方式

String s1 = new String("test");   //s1指向内存中的对象引用

创建过程:变量s1会在堆中生成String对象,并在常量池中判断是否已存在test这个字面量,若不存在,则在常量池中生成该字面量。
(3)intern方法

String s1 = new String("test");
String s2 = s1.intern();

创建过程:String中的intern方法是一个native的方法,当调用intern方法时,如果池已经包含一个等于此String对象的字符串
(用equals(oject)方法确定),则返回池中的字符串。
否则,将intern返回的引用指向当前字符串s1(jdk1.6版本需要将
s1复制到字符串常量池里)。
(4)字符串常量池位置
Jdk1.7:有永久代,但已经逐步“去永久代”,字符串常量池从永久代里的运行时常量池分离到堆里。
Jdk1.8及之后:无永久代,运行时常量池在元空间,字符串常量池里依然在堆里。

String s1 = new String("he") + new String("llo");
String s2 = s1.intern();
System.out.println(s1==s2);
// 该段代码共生成了多少个对象?
字符串常量池.png

相关文章

  • javaSE - 005 - java.lang.String

    总结:1.字面量 拼接 字面量,结果还是在常量池(内存剖析中有说)中创造一个新的字面量。java字符串常量池只会产...

  • 0. 详解python中格式化3种方法f/format/%

    一、字面量含义 1、字面量:以变量或常量给出的原始数据,在程序中可直接使用字面量2、字面量的差值:变量与常量以及表...

  • JVM学习5·常量池(方法区)

    1.Class常量池 Class常量池主要分为两个: 字面量 符号引用 下图中就是反编译之后的代码,我们可以观察到...

  • 4.Class类的文件结构

    文件结构 以8字节为一个单元.Class测试类 1.魔数 2.class版本 3.常量池存放字面量与符号引用。字面...

  • 08-JavaScript语法篇1

    一、字面量、变量、常量 字面量:字面量就是一个值,比如变量的值或者常量的值 变 量:定义完成后,可以修改的数...

  • 字面量和常量

    1.常量:固定不变化的值分类:字面值常量定义的final变量2.变量1):变量的定义格式:数据类型 变量名;如: ...

  • Swift-字符串和字符(一)

    字符串字面量 字符串字面量可以用于为常量和变量提供初始值: 注意someString常量通过字符串字面量进行初始化...

  • Scala的基本类型

    字面量 字面量就是直接在代码中写常量值(constant value)的方式 种类 整型字面量(Integer L...

  • Swift 常量、变量、字面量

    类型标注 如果要添加类型标注,需要在常量或者变量名后面加上一个冒号和空格,然后加上类型名称。 以下常量同理 变量命...

  • java基础知识整理【2】

    常量和变量 常量:是一个不可改变的量,字面常量(通过当前字面就知道值并且不能更改) 例如:整数常量1 变量...

网友评论

      本文标题:字面量与常量池

      本文链接:https://www.haomeiwen.com/subject/gjscfdtx.html