Java:常量池:修订间差异
imported>Soleverlee 以“常量池在java用于保存在编译期已确定的,已编译的class文件中的一份数据。它包括了关于类,方法,接口等中的常量,也包括...”为内容创建页面 |
imported>Soleverlee |
||
第21行: | 第21行: | ||
i4=i5+i6 true | i4=i5+i6 true | ||
</pre> | </pre> | ||
Java为了提高性能提供了和String类一样的对象池机制,当然Java的八种基本类型的包装类(Packaging Type)也有对象池机制。Integer i1=40;Java在编译的时候会执行将代码封装成Integer i1=Integer.valueOf(40); | |||
<source lang="java"> | |||
/* ... | |||
* This method will always cache values in the range -128 to 127, | |||
* inclusive, and may cache other values outside of this range. | |||
*/ | |||
public static Integer valueOf(int i) { | |||
assert IntegerCache.high >= 127; | |||
if (i >= IntegerCache.low && i <= IntegerCache.high) | |||
return IntegerCache.cache[i + (-IntegerCache.low)]; | |||
return new Integer(i); | |||
} | |||
</source> | |||
*参考文章 http://www.cnblogs.com/DreamSea/archive/2011/11/20/2256396.html | *参考文章 http://www.cnblogs.com/DreamSea/archive/2011/11/20/2256396.html | ||
[[Category:Programe]] | [[Category:Programe]] |
2016年4月19日 (二) 11:05的版本
常量池在java用于保存在编译期已确定的,已编译的class文件中的一份数据。它包括了关于类,方法,接口等中的常量,也包括字符串常量,如String s = "java"这种申明方式;当然也可扩充,执行器产生的常量也会放入常量池,故认为常量池是JVM的一块特殊的内存空间。
蛋疼的Integer
Integer i1 = 40;
Integer i2 = 40;
Integer i3 = 0;
Integer i4 = new Integer(40);
Integer i5 = new Integer(40);
Integer i6 = new Integer(0);
System.out.println("i1=i2 \t" + (i1 == i2));
System.out.println("i1=i2+i3\t" + (i1 == i2 + i3));
System.out.println("i4=i5 \t" + (i4 == i5));
System.out.println("i4=i5+i6\t" + (i4 == i5 + i6));
i1=i2 true i1=i2+i3 true i4=i5 false i4=i5+i6 true
Java为了提高性能提供了和String类一样的对象池机制,当然Java的八种基本类型的包装类(Packaging Type)也有对象池机制。Integer i1=40;Java在编译的时候会执行将代码封装成Integer i1=Integer.valueOf(40);
/* ...
* This method will always cache values in the range -128 to 127,
* inclusive, and may cache other values outside of this range.
*/
public static Integer valueOf(int i) {
assert IntegerCache.high >= 127;
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}