Java常量池学习总结-1

来源:互联网 发布:ubuntu不显示eth 编辑:程序博客网 时间:2024/06/18 13:26

今天复习java,将常量池这部分总结一下。

常量池技术,是为了方便快捷地创建某些对象而出现的,当需要一个对象时,就可以从池中取一个出来(如果池中没有则创建一个),则在需要重复创建相等变量时节省了很多时间。常量池其实也就是一个内存空间,常量池存在于方法区中。

JVM的编译器将源程序编译成class文件后,会用一部分字节分类存储常量。这些常量集中在class中的一个区域存放,一个紧接着一个,就称为“常量池”。其中包括了关于类,方法,接口等中的常量,也包括字符串常量,如String s ="java"这种申明方式;对于String s = "java",在编译成.class时能够识别为同一字符串的,自动优化成常量,所以如果有多个字
符串"java",则它们都会引用自同一String对象。也就是说String s = "java"其中"java"值在JAVA程序编译期就确定下来了的。

intern方法会尝试将字符串添加到常量池中,并返回其在常量池中的地址,当常量池中已有该字符串时,intern方法会直接返回地址。

java中基本类型的包装类的大部分都实现了常量池技术,这些类是Byte,Short,Integer,Long,Character,Boolean,两种浮点数类型的包装类则没有实现。Byte,Short,Integer,Long,Character这5种整型的包装类也只是对从-128 到 127的对象使用对象池

利用缓存机制实现常量池:为了减少不必要的内存消耗和内存开辟次数,Integer 里做了一个缓存,缓存了从 -128 到 127 之间的 Integer 对象,总共是256个对象。