java中常量池的理解

参考地址:http://blog.csdn.net/olanlanxiari/article/details/8104505       

常量池(constant pool)指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。它包括了关于类、方法、接口等中的常量,也包括字符串常量。java中的常量池技术,是为了方便快捷地创建某些对象而出现的,当需要一个对象时,就可以从池中取一个出来(如果池中没有则创建一个),则在需要重复重复创建相等变量时节省了很多时间。常量池其实也就是一个内存空间,不同于使用new关键字创建的对象所在的堆空间。

8种基本类型的包装类和对象池

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

public class ConstantPool {
	public static void main(String[] args){  
		  
		   //5种整形的包装类Byte,Short,Integer,Long,Character的对象,  
		  
		   //在值小于127时可以使用常量池  
		  
		   Integer i1=127;  
		  
		   Integer i2=127;  
		  
		   System.out.println(i1==i2);//输出true  
		  
		   //值大于127时,不会从常量池中取对象  
		  
		   Integer i3=128;  
		  
		   Integer i4=128;  
		  
		   System.out.println(i3==i4);//输出false  
		  
		   //Boolean类也实现了常量池技术  
		  
		   Boolean bool1=true;  
		  
		   Boolean bool2=true;  
		  
		   System.out.println(bool1==bool2);//输出true  
		  
		   //浮点类型的包装类没有实现常量池技术  
		  
		   Double d1=1.0;  
		  
		   Double d2=1.0;  
		  
		   System.out.println(d1==d2);//输出false  
		  
		   
		  
		}  
}



你可能感兴趣的:(java中常量池的理解)