图解

一、常量池分类

Java中的常量池分为:Class文件常量池、运行时常量池、全局字符串常量池、基本类型包装对象常量池

1.1Class文件常量池

class文件是一组以字节为单位的二进制数据流,在java代码的编译期间,我们编写的Java文件就被编译为.class文件格式的二进制数据存放在磁盘中,其中就包括class文件常量池,class文件常量池在在编译阶段就已经确定。

既然是常量池,那么里面存放的肯定是常量,那么什么是《常量》呢?class文件常量池主要存放两大常量:字面量和符号引用

字面量:

文本字符串,月就是我们经常声明的:public String s = "abc";中的"abc"

用final修饰的成员变量,包括静态变量、实例变量和局部变量

而对于基本类型数据(甚至是方法中的局部变量),也就是private int value = 1;常量池只保留了他的字段描述I和字段的名称value,他们的字面量不会存在与常量池。

符号引用:

符号引用主要涉及编译原理方面的概念,包括下面三类常量:

类和接口的全限定名

字段的名称和描述符,字段也就是类或者接口中声明的变量,包括类级别变量和实例级的变量

方法中的名称和描述符

也就是参数类型和返回值

1.2运行时常量池

运行时常量池的作用是存储java class文件常量池中的符号信息,运行时常量池中保存着一些class文件中描述的符号引用,同时在类的解析阶段还会将这些符号引用翻译成直接引用(直接指向实例对象的指针,内存地址),翻译出来的直接引用也是存储在运行时常量池中。

运行时常量池相对于class常量池一大特征就是具有动态性,java规范并不要求常量只能在运行时才能产生,也就是说运行时常量池的内容并不全部来自class常量池,在运行时可以通过代码生成常量并且将其放入到运行时常量池中,这种特性备用的最多的就是String.intern()。

1.3全局字符串常量池

全局字符串常量池存在于方法区

1.4 基本类型常量池

Java中基本类型的包装类大部分都实现了常量池技术,这些类Byte,Short,Integer,Long,Character,Boolean,另外两种浮点数类型的包装类则没有实现。另外上面这五种整型的包装类也只是在对应值小于等于127时才可使用对象池,也就是对象不负责创建和管理大于127的这些类的对象。

转载于

这一次,彻底弄懂java中的常量池 - 掘金

浅谈Java中的常量池相关推荐

  1. java字符串常量存哪里_浅谈JAVA中字符串常量的储存位置

    在讲述这些之前我们需要一些预备知识: Java的内存结构我们可以通过两个方面去看待它. 从该角度看的话Java内存结构包含以下部分:该部分内容可以结合:JVM简介(更加详细深入的介绍) 1.栈区:由编 ...

  2. java 常量放在哪里_浅谈JAVA中字符串常量的储存位置

    在讲述这些之前我们需要一些预备知识: Java的内存结构我们可以通过两个方面去看待它. 从该角度看的话Java内存结构包含以下部分: 1.栈区:由编译器自动分配释放,具体方法执行结束后,系统自动释放J ...

  3. java中修饰常量的事_浅谈java中的声明常量为什么要用static修饰

    今天定义一个类常量,想着也只有这个类可以用到,就没用static关键字修饰.结果sonar代码检查提示: Rename this field "PERSON_TYPE_USER" ...

  4. 好好说说Java中的常量池之Class常量池

    前言 在Java中,常量池的概念想必很多人都听说过.这也是面试中比较常考的题目之一.在Java有关的面试题中,一般习惯通过String的有关问题来考察面试者对于常量池的知识的理解,几道简单的Strin ...

  5. 好好说说Java中的常量池之Class常量池 1

    转载自   好好说说Java中的常量池之Class常量池 在Java中,常量池的概念想必很多人都听说过.这也是面试中比较常考的题目之一.在Java有关的面试题中,一般习惯通过String的有关问题来考 ...

  6. java null什么意思_浅谈java中null是什么,以及使用中要注意的事项

    1.null既不是对象也不是一种类型,它仅是一种特殊的值,你可以将其赋予任何引用类型,你也可以将null转化成任何类型,例如: Integer i=null; Float f=null; String ...

  7. java 中的单元测试_浅谈Java 中的单元测试

    单元测试编写 Junit 单元测试框架 对于Java语言而言,其单元测试框架,有Junit和TestNG这两种, 下面是一个典型的JUnit测试类的结构 package com.example.dem ...

  8. 浅谈Java中的Set、List、Map的区别

    就学习经验,浅谈Java中的Set,List,Map的区别,对JAVA的集合的理解是想对于数组: 数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型),JAVA集合可以存储和操 ...

  9. 浅谈JAVA中如何利用socket进行网络编程(二)

    转自:http://developer.51cto.com/art/201106/268386.htm Socket是网络上运行的两个程序间双向通讯的一端,它既可以接受请求,也可以发送请求,利用它可以 ...

  10. scale和java比较_浅谈java中BigDecimal的equals与compareTo的区别

    这两天在处理支付金额校验的时候出现了点问题,有个金额比较我用了BigDecimal的equals方法来比较两个金额是否相等,结果导致金额比较出现错误(比如3.0与3.00的比较等). [注:以下所讲都 ...

最新文章

  1. linux setcap指令,Linux下setcap详解
  2. OpenStack(五)——Neutron组件
  3. Appleman and Tree CodeForces - 461B(树形dp)
  4. 架设动态 DNS 服务器: 让你成为 ISP 啦
  5. android 日历 课程设计,课程设计-数字日历的设计
  6. 如何快速转载CSDN博客(详细)
  7. m3u8解析_Python多进程教你下载M3U8加密或非加密视频!
  8. 《Python编程实战:运用设计模式、并发和程序库创建高质量程序》—— 导读
  9. UVA160 Factors and Factorials【筛选法】
  10. 「代码随想录」474.一和零【动态规划】力扣详解!
  11. mysql 回滚_【133期】面试官:你说熟悉MySQL事务,那来谈谈事务的实现原理吧!...
  12. 毕业设计!Python实现学生教师刷脸签到系统
  13. 都9012年了!假借区块链敛财骗局仍一桩接一桩
  14. IndexedDB 包装库 idb
  15. 【HDU4622】Reincarnation(后缀自动机)
  16. Windows 微信双开(批处理)
  17. 便宜实惠的移动自动快充:50元仅需48.90元
  18. MySQL的备份、恢复
  19. 高并发系统高可用设计方案(一)
  20. 并发批量管理500台以上服务器脚本分享(shell版)

热门文章

  1. 没有高学历和工作经验的应届毕业生在IT行业是不是寸步难行?
  2. 【立创开源】RGBW调光台灯
  3. workbench动力学周炬_ANSYSWorkbench有限元分析实例详解(动力学)
  4. java工程师读音_JAVA怎么念
  5. 利用MATLAB实现Sobel边缘检测
  6. js+canvas 图片+文字合成
  7. 华为查看mpls的命令_华为BGP基本命令
  8. uni-app简单介绍
  9. 使用数位板或数位屏的压感笔时常见的问题及解决方法
  10. 2021-05-09 matlab归一化和反归一化函数——mapminmax