From 7bb89e75db814a436f0c74cb03ff460aae1de06a Mon Sep 17 00:00:00 2001 From: "shuang.kou" Date: Tue, 21 Jan 2020 15:25:48 +0800 Subject: [PATCH] =?UTF-8?q?Update=20Java=E5=86=85=E5=AD=98=E5=8C=BA?= =?UTF-8?q?=E5=9F=9F.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/java/jvm/Java内存区域.md | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/docs/java/jvm/Java内存区域.md b/docs/java/jvm/Java内存区域.md index 5cd9249b..60cc3c56 100644 --- a/docs/java/jvm/Java内存区域.md +++ b/docs/java/jvm/Java内存区域.md @@ -387,8 +387,27 @@ true ### 4.3 8 种基本类型的包装类和常量池 -- **Java 基本类型的包装类的大部分都实现了常量池技术,即 Byte,Short,Integer,Long,Character,Boolean;前面 4 种包装类默认创建了数值[-128,127] 的相应类型的缓存数据,Character创建了数值在[0,127]范围的缓存数据。如果超出对应范围仍然会去创建新的对象。** 为啥把缓存设置为[-128,127]区间?([参见issue/461](https://github.com/Snailclimb/JavaGuide/issues/461))性能和资源之间的权衡。 -- **两种浮点数类型的包装类 Float,Double 并没有实现常量池技术。** +**Java 基本类型的包装类的大部分都实现了常量池技术,即 Byte,Short,Integer,Long,Character,Boolean;前面 4 种包装类默认创建了数值[-128,127] 的相应类型的缓存数据,Character创建了数值在[0,127]范围的缓存数据,Boolean 直接返回True Or False。如果超出对应范围仍然会去创建新的对象。** 为啥把缓存设置为[-128,127]区间?([参见issue/461](https://github.com/Snailclimb/JavaGuide/issues/461))性能和资源之间的权衡。 + +```java +public static Boolean valueOf(boolean b) { + return (b ? TRUE : FALSE); +} +``` + +```java +private static class CharacterCache { + private CharacterCache(){} + + static final Character cache[] = new Character[127 + 1]; + static { + for (int i = 0; i < cache.length; i++) + cache[i] = new Character((char)i); + } +} +``` + +两种浮点数类型的包装类 Float,Double 并没有实现常量池技术。** ```java Integer i1 = 33;