java常量池詳解】的更多相关文章

一.相关概念 什么是常量用final修饰的成员变量表示常量,值一旦给定就无法改变!final修饰的变量有三种:静态变量.实例变量和局部变量,分别表示三种类型的常量. Class文件中的常量池在Class文件结构中,最头的4个字节用于存储魔数Magic Number,用于确定一个文件是否能被JVM接受,再接着4个字节用于存储版本号,前2个字节存储次版本号,后2个存储主版本号,再接着是用于存放常量的常量池,由于常量的数量是不固定的,所以常量池的入口放置一个U2类型的数据(constant_pool_…
今天My partner问我一个让他头疼的Java question,求输出结果: /** * * @author DreamSea 2011-11-19 */ public class IntegerTest { public static void main(String[] args) { objPoolTest(); } public static void objPoolTest() { Integer i1 = 40; Integer i2 = 40; Integer i3 = 0;…
一个Java question,求输出结果   public class IntegerTest { public static void main(String[] args) { objPoolTest(); } public static void objPoolTest() { Integer i1 = 40; Integer i2 = 40; Integer i3 = 0; Integer i4 = new Integer(40); Integer i5 = new Integer(4…
转自:http://www.cnblogs.com/iyangyuan/p/4631696.html jvm虚拟内存分布图: 程序计数器:JVM执行程序的流水线. 本地方法栈:JVM调用操作系统方法所使用的栈. 虚拟机栈:JVM执行Java代码所使用的栈. 方法区:存放一些常量.静态变量.类信息等:可以理解为class文件在内存中的存放位置. 虚拟机堆:JVM执行Java代码所使用的堆. Java中的常量池实际上分为两种形态: 静态常量池:即*.class文件中的常量池,class文件中的常量池…
String类两种不同的创建方式 String s1 = "zheng"; //第一种创建方式 String s2 = new String("junxiang"); //第二种创建方式 第一种创建方式是编译期在常量池中创建对象,如果常量池中已经存在"zheng"这个String对象,就将地址赋给s1.第二种创建方式是运行期在堆中创建对象,无论堆中是否已有都会重新创建一个对象. String s1 = new String("xyz&q…
test1: package StringTest; public class test1 { /** * @param args */ public static void main(String[] args){ String a = "a1"; String b = "a"+ 1; System.out.println(a==b); }//true } test2: package StringTest; public class test2 { /** *…
CONSTANT_Fieldref_info, CONSTANT_Name_Type_info) 一般而言,我们在定义类的过程中会定义一些 field 字段,然后会在这个类的其他地方(如方法中)使用到它.有可能我们在类的方法中只使用field字段一次,也有可能我们会在类定义的方法中使用它很多很多次. 举一个简单的例子,我们定一个叫Person的简单java bean,它有name和age两个field字段,如下所示: package com.louis.jvm; public class Per…
在class文件中,“常量池”是最复杂也最值得关注的内容. Java是一种动态连接的语言,常量池的作用非常重要,常量池中除了包含代码中所定义的各种基本类型(如int.long等等)和对象型(如String及数组)的常量值还,还包含一些以文本形式出现的符号引用,比如: 类和接口的全限定名: 字段的名称和描述符: 方法和名称和描述符. 在C语言中,如果一个程序要调用其它库中的函数,在连接时,该函数在库中的位置(即相对于库文件开头的偏移量)会被写在程序中,在运行时,直接去这个地址调用函数: 而在Jav…
java常量池是一个经久不衰的话题,也是面试官的最爱,题目花样百出,小菜早就对常量池有所耳闻,这次好好总结一下. 理论 小菜先拙劣的表达一下jvm虚拟内存分布:      程序计数器是jvm执行程序的流水线,存放一些跳转指令,这个太高深,小菜不懂.      本地方法栈是jvm调用操作系统方法所使用的栈.      虚拟机栈是jvm执行java代码所使用的栈.      方法区存放了一些常量.静态变量.类信息等,可以理解成class文件在内存中的存放位置.      虚拟机堆是jvm执行java…
本篇随笔为转载,原贴地址:Java常量池理解与总结. (其实Java的常量池有点像C++中的存储字符串常量的常量存储区). 一.相关概念 什么是常量用final修饰的成员变量表示常量,值一旦给定就无法改变!final修饰的变量有三种:静态变量.实例变量和局部变量,分别表示三种类型的常量. Class文件中的常量池在Class文件结构中,最头的4个字节用于存储魔数Magic Number,用于确定一个文件是否能被JVM接受,再接着4个字节用于存储版本号,前2个字节存储次版本号,后2个存储主版本号,…