一,案例情景
/** 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包装类原理与用法实例分析 Java包装类是Java语言中的一种特殊的类,它可以将基本数据类型转换成对象,以便在面向对象的编程中使用。在Java中,基本数据类型包括byte、short、int、long、float、double、boolean...
- **自动拆箱实现**:当需要将包装类对象转换为基本数据类型时,编译器会调用包装类中的特定方法(如`intValue()`、`doubleValue()`等)来获取基本数据类型的值。 #### 自动装箱和拆箱的应用 自动装箱和拆箱在多个...
MATLAB是一种广泛使用的编程环境,特别适合数值计算和数据分析。将Boykov-Kolmogorov算法封装在MATLAB中,使得研究人员和工程师能够方便地在MATLAB环境中解决最大流/最小割问题,而无需深入学习底层的C++或其它低级...
工作流程大致为:塑料管由进料输送装置均匀送入,通过计数机构进行实时计数,当达到预设的计数值时,分拣装置将塑料管分组并送至包装位置,包装装置迅速完成封装,最后由控制系统协调各个部件的工作,确保整个过程...
- **包装类转换为基本数值类型**:使用包装类的`xxxValue()`方法。 - **字符串转换为包装类**:使用包装类提供的`valueOf(String s)`方法。 - **包装类转换为字符串**:使用`toString()`方法。 - **字符串转换为基本...
自动烫金机是一种广泛应用在印刷行业的设备,主要用于在各种包装材料上烫印金色或银色等金属效果的图案,提升产品外观的高档感。本文将深入探讨如何利用MATLAB进行自动烫金机连杆机构的运动分析,从而实现精准、高效...
- **原理**:通过INC和DEC指令实现数值的加减操作,实现微调。 3. **NEG位移反转控制(7.3)** - **应用场景**:位移方向的控制。 - **原理**:使用NEG指令实现位移方向的反转。 #### 八、应用指令旋转位移设计...
此外,通过封装在GUI内的MATLAB程序,可以实现对数据的高效处理和计算,为包装系统设计提供了可靠的技术支持。 综上所述,本文介绍的非线性包装系统破损边界计算软件的设计,不仅涵盖了理论研究和实际应用,还包括...
- **以`UF`开头的控件** (`UFDate`, `UFDouble`, `UFBoolean`, 等): 这些控件主要用于数据输入和展示,例如日期选择器、数值输入框、布尔值选择器等。 ##### 2. 参照 - **`UIRefPane`**: 用于创建各种参照选择面板...
在 Python 中,我们可以使用 NumPy 库来处理数值计算,Pandas 库来处理数据集,Matplotlib 库进行数据可视化,而 Scikit-learn 库则提供了预包装的 KNN 模型。以下是实现 KNN 算法的一般步骤: 1. **数据预处理**:...
设计还考虑到了系统的可扩展性,例如在未来可以扩展鉴别硬币真假和自动包装的功能,进一步提升自动化水平,减少人工干预,提高效率。 9. 硬件开发与软件编程 系统涉及的硬件开发包括电路设计、传感器集成以及机械...
在JDK 5.0之后,Java引入了自动装箱和拆箱机制,使得开发者能够更便捷地处理基本类型和它们对应的包装类。例如: ```java // 装箱 Integer a = new Integer(1); // 拆箱 int b = a.intValue(); ``` 在早期版本中,...
2.14 LIST、ArrayList、LinkedList和Vector的区别和实现原理 - List接口提供了有序集合的操作。 - ArrayList基于动态数组实现,适合随机访问。 - LinkedList基于双向链表实现,适合插入和删除操作。 - Vector是同步...
本章主要介绍Java语言的基础知识,包括程序的基本构成要素、数据类型、运算符、数值计算方法、表达式、包装类、输入输出初步、流程控制以及数组和字符串的使用。 3.1 Java语言程序的基本构成要素 3.1.1 标识符 在...
下面我们将深入探讨自动包装机计数传送装置的工作原理、组成部分、优势以及其在实际应用中的技术要点。 自动包装机的计数传送装置主要由以下几个部分组成: 1. **进料系统**:这是设备的初始阶段,负责将待包装的...
可以使用Character类的getNumericValue方法或者通过包装类(如Integer.parseInt)来转换。 23. 如何将数字转换为字符? 数字可以通过String类的静态方法valueOf转换成字符串,再使用charAt方法取得特定位置的字符。...
这些包装类允许我们将基本类型转换为对象,便于进行一些高级操作,如比较、格式化输出等。 了解并熟练掌握这些Java基础知识对于成为一名合格的Java开发者至关重要,特别是在面试过程中,能够清晰地阐述这些概念和...
- 自Java 5起,引入了自动装箱和拆箱机制,使得基本类型和其包装类之间可以自动转换,但要注意装箱后的对象比较会涉及到引用比较而非值比较。 8. **自动装箱与拆箱**: - 当基本类型与包装类型之间进行操作时,...
Integer是其对应的包装类,可以作为对象使用,支持一些额外的操作,如自动装箱/拆箱。 6. **char型变量存储中文**:在Java中,char类型可以存储Unicode编码,因此可以存储中文字符。 7. **最有效率的计算2乘以8**...
- 学习如何使用包装类进行数值类型的转换。 **实验内容:** - 学习异常处理的基本语法,包括try、catch、finally等关键字的使用。 - 实践自定义异常的创建和抛出。 - 使用包装类进行基本数据类型与字符串之间的转换...