- 我们都知道Java中有int,short,long,byte,float,double,char,和boolean等八个基本数据类型
- 为了面向对象操作的一致性,Java为每种基本数据类型都提供了相应的封装类型,并且提供相应的方法实现基本数据类型与封装类之间的相互转化
- 从JDK5.0版本开始引用了自动装箱和自动拆箱特性,主要的目的是方便封装类和基本类型之间的转化,该特性允许基本数据类型之间直接相互赋值.
下面看一段代码:
public class IntegerTest {
public static void main(String[] args) {
Integer in1 = new Integer(99);
Integer in2 = new Integer(99);
System.out.println(in1 == in2);
}
}
结果显而易见,一定是false,这个就不用多余的解释了,呵呵.....
再来看一段代码:
public class IntegerTest {
public static void main(String[] args) {
Integer in1 = new Integer(99);
Integer in2 = 99;
System.out.println(in1 == in2);
}
}
估计看到这里的时候有些人会开始鄙视我了,这么弱智的问题也摆出来.......
那好接下来开始进入正题:
示例1).
public class IntegerTest {
public static void main(String[] args) {
Integer in1 = 99;
Integer in2 = 99;
System.out.println(in1 == in2);
}
}
实例2).
public class IntegerTest {
public static void main(String[] args) {
Integer in1 = 199;
Integer in2 = 199;
System.out.println(in1 == in2);
}
}
- 看到这里估计你们已经可以肯定,楼主%*&$#,但你们可以给我一定可以的答案吗,true或者false???如果不能肯定的话运行测试一下吧,嘎嘎~~
|
不
|
|
理
|
|
解
|
|
的
|
|
孩
|
|
子
|
|
跟
|
|
我
|
|
下
|
|
来
|
|
- 相信到了这里的每个人心里都会想一样只是数字变了为神马结果却不同呢,别着急,
请看下面两个实例编译后的反编译代码:
反编译代码1).
import java.io.PrintStream;
public class IntegerTest
{
public IntegerTest()
{
}
public static void main(String args[])
{
Integer in1 = Integer.valueOf(99);
Integer in2 = Integer.valueOf(99);
System.out.println(in1 == in2);
}
}
反编译代码2).
import java.io.PrintStream;
public class IntegerTest
{
public IntegerTest()
{
}
public static void main(String args[])
{
Integer in1 = Integer.valueOf(199);
Integer in2 = Integer.valueOf(199);
System.out.println(in1 == in2);
}
}
看到这里想必我们都知道问题的所在了,valueOf方法,那好,我们看一下它的源码:
/**
* Returns an {@code Integer} instance representing the specified
* {@code int} value. If a new {@code Integer} instance is not
* required, this method should generally be used in preference to
* the constructor {@link #Integer(int)}, as this method is likely
* to yield significantly better space and time performance by
* caching frequently requested values.
*
* This method will always cache values in the range -128 to 127,
* inclusive, and may cache other values outside of this range.
*
* @param i an {@code int} value.
* @return an {@code Integer} instance representing {@code i}.
* @since 1.5
*/
public static Integer valueOf(int i) {
assert IntegerCache.high >= 127;
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
- 看到这里我们都明白了,其实对于-128到127之间的数,Integer.valueOf(99)返回的是缓存中的对象,所以两次调用valueOf返回的是同一个对象,故结果是true.而Integer.valueOf(199)返回的则是重新实例化的对象,故结果是false.好了,自动装箱的问题有了一个初步的了解,那自动拆箱咧?动手实践一下吧!!!!!
分享到:
相关推荐
计算机后端-Java-Java核心基础-第14章 面向对象06 24. 新特性:自动装箱与自动拆箱.avi
//这里就是自动的装箱,将3转换成Integer类型并放到集合中自动拆箱包装类自动转为基本类型 Integer >> int面试常见题目:自动拆箱与自动装箱的问
什么是自动装箱和自动拆箱
在Java编程中,自动装箱(Autoboxing)和自动拆箱(Unboxing)是两个非常核心的概念,它们允许基本数据类型和它们对应的包装类之间无缝转换。这种转换机制在Java 5中引入,极大地简化了代码编写,但同时也带来了一些...
在Java编程语言中,自动装箱(Autoboxing)和自动拆箱(Unboxing)是两个重要的特性,它们简化了基本类型(如int、double等)与对应的包装类(如Integer、Double等)之间的转换过程。这些特性是在Java 5引入的,极大...
Java编程中自动拆箱与自动装箱详解 Java编程中自动拆箱与自动装箱是从J2SE 5.0开始提供的功能,可以简化Java编程中的数据类型转换。下面是自动拆箱与自动装箱的详细解释: 1. 基本数据类型的自动装箱(Autoboxing...
在C#编程语言中,装箱与拆箱是两种关键的操作,它们涉及到值类型与引用类型之间的转换。本文将深入探讨这两个概念,以及它们在实际编程中的应用。 首先,我们来理解什么是装箱。装箱(Boxing)是指将值类型(如int...
在Java编程语言中,自动装箱(Autoboxing)和自动拆箱(Unboxing)是从Java 1.5版本开始引入的一项特性,其目的是简化原始类型(Primitive Types)与它们对应的包装类(Wrapper Classes)之间的转换过程。...
对于基本数据类型与包装类之间的转换,Java提供了一个非常便利的功能——自动装箱和自动拆箱。这些功能极大地简化了编程流程,使代码更加简洁易读。 #### 基本数据类型与包装类 在Java中,**基本数据类型**是指...
### Tedu正则表达式与Object与自动装箱与拆箱 #### 正则表达式 正则表达式是一种强大的文本处理工具,可以用来检查一个序列(如字符串)是否符合特定的模式。在编程中,它被广泛应用于数据验证、搜索和替换等方面...
Java中的自动装箱和拆箱是自J2SE 5.0版本引入的特性,它极大地简化了基本数据类型与其对应的包装类之间的转换过程。基本数据类型包括int、double、boolean等,而包装类如Integer、Double和Boolean分别对应这些基本...
### Java中的自动装箱与拆箱 #### 一、概念介绍 在Java中,自动装箱(Autoboxing)和拆箱(Unboxing)是Java编译器提供的一种特性,用于在基本数据类型和对应的包装类之间进行自动转换。这种特性简化了编程过程中...
// 自动拆箱,自增,再自动装箱 System.out.println("y = " + y); ``` 需要注意的是,当比较两个包装器类对象时,如`Integer`,它们的`equals()`方法会检查对象的引用是否相同,而不是值是否相等。因此: ```java...
Java中自动装箱、拆箱引起的耗时详解 Java中自动装箱和拆箱是Java语言中一个重要的特性,它可以将基本数据类型和它们的包装类之间进行转换,这个过程是透明的,程序员不需要手动进行转换。但是,这个过程会引起一些...
自动装箱与拆箱的实现原理 自动装箱是指Java将原始类型值转换成对应的对象的过程,如将int类型的变量转换成Integer对象。反之,将对象转换成原始类型值的过程称为拆箱。因为这里的装箱和拆箱是自动进行的非人为转换...
1. **自动装箱与拆箱**:自动装箱是在使用包装类的地方自动插入包装类的构造函数,自动拆箱则是在使用基本数据类型的地方自动插入包装类的 `xxxValue()` 方法。 2. **对象比较**:`==` 操作符用于比较引用类型变量...
自动装箱与拆箱的机制可以让我们在Java的变量赋值或者是方法调用等情况下使用原始类型或者对象类型更加简单直接。 如果你在Java1.5下进行过编程的话,你一定不会陌生这一点,你不能直接地向集合(Collections)中放...
为了深入理解这些知识点,阅读提供的"数据类型_4_值类型、引用类型、装箱和拆箱.pdf"和"数据类型_5_类型转换.pdf"文档将非常有帮助,它们会详细讲解这些主题,并提供实例说明,帮助你巩固理论知识并将其应用到实践中...
自动装箱与拆箱:自动装箱(Autoboxing)指的是自动地将基本数据类型转换为对应的包装类对象;自动拆箱(Unboxing)则是将包装类对象自动转换为基本数据类型。 常用方法:演示如何使用包装类中的这些常见方法。 null...
// 自动拆箱,编译器隐含调用Integer.intValue() ``` 在上述代码示例中,`m11()` 和 `m12()` 方法展示了装箱与拆箱的微妙之处。这两个方法分别创建了两个Integer对象,但它们在内存中的存储方式不同。在 `m11()` ...