public static void main(String[] args) {
//java的自动装箱
Integer x = 100;
Integer y = 100;
System.out.println(x == y);//输出true
int a1 = 200;
int b1 = 200;
System.out.println(a1 == b1);//输入false
}
//查看自动装箱方法Integer.valueOf(int)的源码
public static Integer valueOf(int i) {
if(i >= -128 && i <= IntegerCache.high)
return IntegerCache.cache[i + 128];
else
return new Integer(i);
}
继续查看缓存方法
private static class IntegerCache {
static final int high;
static final Integer cache[];
static {
final int low = -128;
// high value may be configured by property
int h = 127;
//integerCacheHighPropValue由JVM虚拟机进行配置(源码注释)
if (integerCacheHighPropValue != null) {
// Use Long.decode here to avoid invoking methods that
// require Integer's autoboxing cache to be initialized
//decode方法可以将对应的正负,二进制,八进制,十六进制等转换成十进制的正数
int i = Long.decode(integerCacheHighPropValue).intValue();
i = Math.max(i, 127);
// Maximum array size is Integer.MAX_VALUE
h = Math.min(i, Integer.MAX_VALUE - -low);
}
high = h;
cache = new Integer[(high - low) + 1];
int j = low;
for(int k = 0; k < cache.length; k++)
cache[k] = new Integer(j++);
}
private IntegerCache() {}
}
可以发现,在-128到127(如果JVM没有配置integerCacheHighPropValue的情况)之间的数,会从缓存中取,所以第一个输出,自动装箱后是同一个对象,所以地址相同,输出true;第二种方法类似于new了两个Integer对象,地址不一样,所以为false
分享到:
相关推荐
在Java编程中,自动装箱(Autoboxing)和自动拆箱(Unboxing)是两个非常核心的概念,它们允许基本数据类型和它们对应的包装类之间无缝转换。这种转换机制在Java 5中引入,极大地简化了代码编写,但同时也带来了一些...
Java的自动装箱功能极大地简化了基本数据类型与它们对应的包装类之间的相互转换。然而,这一特性可能会引起一些不易察觉的副作用,这些副作用往往是由于JVM对某些包装类对象实现了缓存机制所致。 1. ==和equals行为...
Java自动装箱和拆箱的实现原理是 Java语言的一个重要特性,它使得开发者可以更加方便地使用原始类型和封装类之间的转换,但是同时也容易引发一些疑惑和错误。通过了解自动装箱和拆箱的实现原理,我们可以更好地使用...
Java中的自动装箱和拆箱是自JDK 1.5版本引入的一种语言特性,它极大地简化了基础数据类型(如int)与它们对应的包装类(如Integer)之间的转换过程。这一特性使得开发者无需手动创建包装类实例或使用显式类型转换,...
Java中的自动装箱和拆箱是自J2SE 5.0版本引入的特性,它极大地简化了基本数据类型与其对应的包装类之间的转换过程。基本数据类型包括int、double、boolean等,而包装类如Integer、Double和Boolean分别对应这些基本...
Java语言在设计时引入了自动装箱和拆箱机制,以方便开发者在基本类型与它们对应的包装类之间进行转换。这个特性在提高编程效率的同时,也...同时,理解Java自动装箱和拆箱的原理,有助于在编写代码时做出明智的选择。
有了自动装箱,你可以写如下的代码 Character boxed = 'a'; char unboxed = boxed; 编译器自动将它转换为 Character boxed = Character.valueOf('a'); char unboxed = boxed.charValue(); 然而,...
Java自动拆装箱是Java SE 5.0引入的一项特性,它极大地方便了开发者在编程过程中的操作,特别是与集合框架的交互。自动拆装箱是指将基本数据类型的值与对应的包装类对象之间进行自动转换的过程。在Java中,有8种基本...
在Java编程语言中,自动装箱(Autoboxing)和自动拆箱(Unboxing)是两个重要的特性,它们简化了基本类型(如int、double等)与对应的包装类(如Integer、Double等)之间的转换过程。这些特性是在Java 5引入的,极大...
自动装箱和拆箱从Java 1.5开始引入,目的是将原始类型值转自动地转换成对应的对象。自动装箱与拆箱的机制可以让我们在Java的变量赋值或者是方法调用等情况下使用原始类型或者对象类型更加简单直接。 如果你在Java...
它针对Java语言特点、面向对象与面向过程的区别、Java基本数据类型及其封装类、标识符命名规则、instanceof关键字的作用以及Java自动装箱与拆箱的知识点进行了阐述。下面将详细展开这些知识点。 1. Java语言特点: ...
java是个包装特别好的绅士,其实即便编译器悄悄在私底下干了什么龌龊事儿,我们一般来说也不是很容易看的到。 不过这些问题可以通过看字节码来解决。 代码很简单: Integer x = 5; x++; 且看字节码: ...
本文档是关于软件工程师程序员Java面试题和答案的总结,涵盖了Java语言的特点、面向对象和面向过程的区别、基本数据类型、标识符的命名规则、instanceof关键字的作用、Java自动装箱与拆箱等知识点。 一、Java语言的...
本文档旨在总结 Java 面试题及参考答案,涵盖了 Java 语言的基本特点、面向对象和面向过程的区别、基本数据类型、引用类型、标识符的命名规则、instanceof 关键字的作用、Java 自动装箱与拆箱等知识点。 一、Java ...
从Java 5开始,引入了自动装箱和拆箱特性,使得基础数据类型和其包装器类之间的转换更加方便。例如: ```java Integer y = 567; // 自动装箱 y++; // 自动拆箱,自增,再自动装箱 System.out.println("y = " + y); ...
自动装箱就是Java自动将原始(基本)类型转换成对应的封装器(对象)类型的过程,如将int变量转换成Integer对象,这个过程叫做装箱。自动拆箱,就是Java自动将封装器(对象)类型转换成基本类型的过程,如将Integer...
### Java中的自动装箱与拆箱 #### 一、概念介绍 在Java中,自动装箱(Autoboxing)和拆箱(Unboxing)是Java编译器提供的一种特性,用于在基本数据类型和对应的包装类之间进行自动转换。这种特性简化了编程过程中...
是Java开发者在求职过程中必不可少的参考资料,涵盖了Java语言的关键知识点,包括但不限于其语言特性、面向对象编程的理解、数据类型及其封装类、标识符命名规则、`instanceof`关键字的运用以及Java自动装箱与拆箱...
Java自动装箱与拆箱 装箱:自动将基本数据类型转换为包装器类型(int-->Integer),调用方法:Integer的valueOf(int)。 拆箱:自动将包装器类型转换为基本数据类型(Integer-->int),调用方法:Integer的intVal。
在Java编程语言中,自动装箱(Autoboxing)和自动拆箱(Unboxing)是从Java 1.5版本开始引入的一项特性,其目的是简化原始类型(Primitive Types)与它们对应的包装类(Wrapper Classes)之间的转换过程。...