java常量池
来源:互联网 发布:linux bash脚本 编辑:程序博客网 时间:2024/04/30 00:06
Java的8种基本类型(Byte, Short, Integer, Long, Character, Boolean, Float, Double), 除Float和Double以外, 其它六种都实现了常量池, 但是它们只在大于等于-128并且小于等于127时才使用常量池。
由如下例子可以看出:
- public static void main(String[] args) {
- Integer a = 127;
- Integer b = 127;
- System.out.println("等于127:");
- System.out.println(a == b);
- System.out.println("*****************");
- a = 128;
- b = 128;
- System.out.println("等于128:");
- System.out.println(a == b);
- System.out.println("*****************");
- a = -128;
- b = -128;
- System.out.println("等于-128:");
- System.out.println(a == b);
- System.out.println("*****************");
- a = -129;
- b = -129;
- System.out.println("等于-129:");
- System.out.println(a == b);
- System.out.println("*****************");
- // 测试Boolean
- System.out.println("测试Boolean");
- Boolean c = true;
- Boolean d = true;
- System.out.println(c == d);
- d = new Boolean(true);
- System.out.println(c == d);
- }
结果如下:
等于127:
true
*****************
等于128:
false
*****************
等于-128:
true
*****************
等于-129:
false
*****************
测试Boolean
true
false
当我们给Integer赋值时,实际上调用了Integer.valueOf(int)方法,查看源码,其实现如下:
- public static Integer valueOf(int i) {
- if(i >= -128 && i <= IntegerCache.high)
- return IntegerCache.cache[i + 128];
- else
- return new Integer(i);
- }
而IntegerCache实现如下:
- private static class IntegerCache {
- static final int high;
- static final Integer cache[];
- static {
- final int low = -128;
- // high value may be configured by property
- int h = 127;
- if (integerCacheHighPropValue != null) {
- // Use Long.decode here to avoid invoking methods that
- // require Integer's autoboxing cache to be initialized
- int i = Long.decode(integerCacheHighPropValue).intValue();
- i = Math.max(i, 127);
- // Maximum array size is Integer.MAX_VALUE
- h = Math.min(i, Integer.MAX_VALUE - -low);
- }
- high = h;
- cache = new Integer[(high - low) + 1];
- int j = low;
- for(int k = 0; k < cache.length; k++)
- cache[k] = new Integer(j++);
- }
- private IntegerCache() {}
- }
注意cache数组是静态的。
- Java常量池
- java常量池
- Java常量池
- java 常量池笔记
- Java常量池
- java常量池概念
- Java 常量池
- java常量池概念
- java常量池
- java堆栈常量池
- 理解java常量池
- Java常量池详解
- java常量池概念
- 理解Java常量池
- JAVA常量池技术
- Java之常量池
- java 常量池
- java 常量池
- testApp上的方法总结
- 多线程-同步
- c#获取当前应用程序所在路径
- Oracle 全表扫描及其执行计划(full table scan)
- android:关于主工程和library project
- java常量池
- USACO1.1.2 Greedy Gift Givers 贪婪的送礼者
- C# typeof 和 GetType区别
- Delphi Webbrowser使用方法详解(二)
- REVIT二次开发 系统错误处理
- 好的Kentico内容管理网站有哪些(上)
- 完美解决“find: 路径必须在表达式之前:”
- 关于memcache分布式一致性hash
- How to calculate the MD5 hash of a large file in C?