装箱就是自动将基本数据类型转换为包装器类型(int-->Integer)。调用方法:Integer的 valueOf(int) 方法

拆箱就是自动将包装器类型转换为基本数据类型(Integer-->int)。调用方法:Integer的 intValue方法

在Java SE5之前,如果要生成一个数值为10的Integer对象,必须这样进行:

Integer i = new Integer(10);

而在从Java SE5开始就提供了自动装箱的特性,如果要生成一个数值为10的Integer对象,只需要 这样就可以了:

Integer i = 10;

以下代码会输出什么?

public class Main {
public static void main(String[] args) { Integer i1 = 100;
Integer i2 = 100;
Integer i3 = 200;
Integer i4 = 200; System.out.println(i1==i2);
System.out.println(i3==i4);
}
}

结果:

true
false

为什么会出现这样的结果?输出结果表明i1和i2指向的是同一个对象,而i3和i4指向的是不同的对 象。此时只需一看源码便知究竟,下面这段代码是Integer的valueOf方法的具体实现:

public static Integer valueOf(int i) {
if(i >= -128 && i <= IntegerCache.high)
return IntegerCache.cache[i + 128];
else
return new Integer(i);
}

其中IntegerCache类的实现为:

 1 private static class IntegerCache {
2 static final int high;
3 static final Integer cache[];
4 static {
5 final int low = -128;
6 // high value may be configured by property
7 int h = 127;
8 if (integerCacheHighPropValue != null) {
9 // Use Long.decode here to avoid invoking methods that
10 // require Integer's autoboxing cache to be initialized
11 int i = Long.decode(integerCacheHighPropValue).intValue();
12 i = Math.max(i, 127);
13 // Maximum array size is Integer.MAX_VALUE
14 h = Math.min(i, Integer.MAX_VALUE - -low);
15 }
16 high = h;
17 cache = new Integer[(high - low) + 1];
18 int j = low;
19 for(int k = 0; k < cache.length; k++)
20 cache[k] = new Integer(j++);
21 }
22 private IntegerCache() {}
23 }

从这两段代码可以看出,在通过valueOf方法创建Integer对象的时候,如果数值在[-128,127]之间, 便返回指向IntegerCache.cache中已经存在的对象的引用;否则创建一个新的Integer对象。 上面的代码中i1和i2的数值为100,因此会直接从cache中取已经存在的对象,所以i1和i2指向的是 同一个对象,而i3和i4则是分别指向不同的对象。

以下代码输出什么

public class Main {
public static void main(String[] args) { Double i1 = 100.0;
Double i2 = 100.0;
Double i3 = 200.0;
Double i4 = 200.0; System.out.println(i1==i2);
System.out.println(i3==i4);
}
}

结果:

false
false

原因: 在某个范围内的整型数值的个数是有限的,而浮点数却不是。

最新文章

  1. svn ignore
  2. DEV GridControl双击行事件
  3. mysql规范
  4. C#变量与数据类型
  5. hadoop(四): 本地 hbase 集群配置 Azure Blob Storage
  6. Winform之ListView
  7. 车牌识别LPR(一)-- 研究背景
  8. 关于typedef int(*lpAddFun)(int, int)
  9. iOS7 文本转语音 AVSpeechSynthesizer
  10. UVA11396-Claw Decomposition(二分图判定)
  11. PuTsangTo-单撸游戏开发03 碰撞与跳跃瑕疵版
  12. JAVA入门[11]-jsp几点基础语法
  13. 微信小程序笔记
  14. HDU 5288 OO&rsquo;s Sequence
  15. 【splunk】数据输入-文件目录 导入失败
  16. hdu 1698 Just a Hook 【线段树+lazy】
  17. [转]thinkphp在iis下的rewrite伪静态的配置方法
  18. Database Vault Administrator的使用
  19. php API接口入门
  20. 第2季:从官方例程深度学习海思SDK及API

热门文章

  1. 关于网页实现串口或者TCP通讯的说明
  2. 微信支付v3接口的 官方 Java SDK
  3. Codeforces Round #811 (Div. 3)D. Color with Occurrences
  4. ClickHouse(10)ClickHouse合并树MergeTree家族表引擎之ReplacingMergeTree详细解析
  5. 1.nginx学习
  6. 微信小程序经纬度转化为具体位置(逆地址解析)
  7. MySQL InnooDB引擎之并发事务问题以及隔离级别的作用和区别
  8. civil3d安装教程2022序列号和密钥
  9. 4.mysql-进阶
  10. .NET 6使用ImageSharp给图片添加水印