一,案例情景
/** Integer案例**/ Integer i1 = 128; Integer i2 = 128; Integer i3 = 127; Integer i4 = 127; System.out.println(i1 == i2);//false System.out.println(i3==i4); //true
/** Long案例**/ Long l1 = 128L; Long l2 = 128L; Long l3 = -128L; Long l4 = -128L; System.out.println(l1 == l2);//false System.out.println(l3==l4);//true
/**Float(Double)案例(形成对比)**/ Float f1 = 128f; Float f2 = 128f; Float f3 = 127f; Float f4 = 127f; System.out.println(f1 == f2);//false System.out.println(f3==f4);//false
二,原理分析
首先 Integer i1 = 127;将基本数据类型赋给包装类,会调用Integer.valueOf(int i)自动装包,转换为包装类对象。同理,将包装类对象赋给基本数据类型也会自动拆包。如果该包装类对象为null,则会出现NullPointerException异常。
之所以会出现上述结果。因为Byte,Integer,Long对在-128~127之间的数据进行了缓存,如果待转换的数值 i 在该范围了则直接从缓存取,而不是new Integer(i)。
Float和Double则是每次都new一个新的,没有缓存机制,所以都为false。
JDK源码:
/**Integer的实现**/ public static Integer valueOf(int i) { if(i >= -128 && i <= IntegerCache.high) return IntegerCache.cache[i + 128];//IntegerCache.high为127,取缓存 else return new Integer(i); } /**Long的实现**/ public static Long valueOf(long l) { final int offset = 128; if (l >= -128 && l <= 127) { // will cache return LongCache.cache[(int)l + offset]; } return new Long(l); } /**Float的实现(无缓存)**/ public static Float valueOf(float f) { return new Float(f); }
相关推荐
这个文件里的内容适合Java初学者,这个文件里边包含的是8基本数据类型的包装类、如何创建包装类以及包装类的使用方法。这也是小编在刚开学学习JavaSE时记录的一些笔记,里面的内容非常适合JavaSE入门者学习,都是...
原子操作 四种原子更新方式文档,分别是原子更新基本类型,原子更 新数组,原子更新引用和原子更新字段。Atomic包里的类基本都是使用Unsafe实现的包装 类
java包装类和集合类详解,如果对这两个类库还不清楚的 可以参考
java包装类练习.doc
包装类的定义 包装类是Java提供的一种特殊类,它的主要作用是将基本数据类型转换为对象,从而可以调用对象的方法。 包装类的使用场景 当我们需要使用基本数据类型进行面向对象的操作时,就可以使用包装类。例如,...
Object类,日期时间类,System类, StringBuilder类,包装类
8个包装类实现的接口:Serializable ,Comparable 3、构造方法 前面6个包装类、Boolean 1、本身常量值的一个构造方法 (value) 2、带String 参数一个构造方法(String s) Character Character(char ...
Java 包装类的使用说明
Java包装类
==与equals的比较,包装类的使用
面向对象程序设计中,可以将一个类的定义 放在另一个类的内部,这就是内部类(有的地方叫嵌套类), 包含内部类的类也被称为外部类(有的地方也叫宿主类...但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口
但在Java中不能定义基本类型(primitive type),为了能将基本类型视为对象来处理,并能连接相关的方法,Java为每个基本类型都提供了包装类,这样,我们便可以把这些基本类型转化为对象来处理了。这些包装类有:Boolean...
java原始数据类型的包装类 java系统自定义原始封装类
Java 基本数据类型与包装类之间的转换的思维脑图
包装类思维导图.xmind
包装类及常用方法简介.pdf
该文件显示了包装类中的自动装箱和自动拆箱!就是类容比较少
TJ8C7枕式糖果包装机工作原理及故障排除
包装机色标追踪控制原理pdf,包装机色标追踪控制原理
内存共享文件的Windows函数的.net包装类。将Windows32中的相关函数进行包装,可用于进程间通信,或建立内存数据库