一、基本类型打包器

1、基本类型:long、int、double、float、boolean

2、类类型:Long、Integer、Double、Float、Boolean

区别:基本类型效率更高,类类型的对象却可以携带更多的信息。

public class TestInteger01 {

	public static void main(String[] args) {

		int a = 10;
int b = 20;
Integer A = new Integer(a);
Integer B = new Integer(b);
System.out.println(a / 3);
System.out.println(A.doubleValue()/ 3);
System.out.println(A.compareTo(B));
}
}
/*
输出结果:
3
3.3333333333333335
-1
*/

doubleValue()可以将打包值以double类型返回

compareTo()可以与另一个Integer对象比较,相同为0,小于为-1,大于为1

二、自动拆箱和装箱

Integer A = 10;  //自动装箱

int a = A;   //自动拆箱

自动拆箱和装箱的内幕

看第一个例子,这个例子声明了int和Integer两个类型,“==”为比较是否参考于同一个对象

public class TestInteger02 {

	public static void main(String[] args) {

		int a = 100;
int b = 100;
if (a == b){
System.out.println("int基本类型:a == b");
}
else{
System.out.println("int基本类型:a != b");
} Integer c = 100;
Integer d = 100;
if (c == d){
System.out.println("Integer类类型:c == d");
}
else{
System.out.println("Integer类类型:c != d");
}
} }
/*
输出结果:
int基本类型:a == b
Integer类类型:c == d
*/

由结果可知,a和b,c和d都是同一个对象。

再来看第二个例子,我们将abcd的值全部改为200,输出却出现了意想不到的结果。 

public class TestInteger03 {

	public static void main(String[] args) {

		int a = 200;
int b = 200;
if (a == b){
System.out.println("int基本类型:a == b");
}
else{
System.out.println("int基本类型:a != b");
} Integer c = 200;
Integer d = 200;
if (c == d){
System.out.println("Integer类类型:c == d");
}
else{
System.out.println("Integer类类型:c != d");
}
} }
/*
输出结果:
int基本类型:a == b
Integer类类型:c != d
*/

我们发现,此时a和b还是同一个对象,c和d却已经不是同一个对象了! 

这是什么原因呢?我们可以查看java/lang/Integer.java

public static Integer valueOf(int i) {
return i >= 128 || i < -128 ? new Integer(i) : SMALL_VALUES[i + 128];
}

这段代码的意思是,在Integer类中,当传进来的值在(-128—127)之间时,便会查看缓存中有没有打包过相同的值,如果有就直接返回,如果没有就new创建。

当传进来的值不在(-128—127)这个区间时,就直接new创建。所以c和d为200,已经超出区间,所以各自开辟一块内存空间存储数据,所以也不会引用自同一个对象。

而基本类型int,就不会有这个烦恼,每次传值,都会查看缓存中是否已经存在。

理解了这个,我们也就理解了基本类型与String型的区别。

我在这篇随笔中(Java中关键字super与this的区别),初步介绍了基本类型与String型的用法区别,但并没有深入认识到这点,而今天看到了林信良先生的java学习笔记,终于有一种醍醐灌顶的感觉。

Java中的自动拆箱装箱(Autoboxing&Unboxing)的更多相关文章

  1. 如何理解Java中的自动拆箱和自动装箱?

    小伟刚毕业时面的第一家公司就被面试官给问住了... 如何理解Java中的自动拆箱和自动装箱? 自动拆箱?自动装箱?什么鬼,听都没听过啊,这...这..知识盲区... 回到家后小伟赶紧查资料,我透,这不 ...

  2. JAVA高级特性--自动拆箱-装箱,枚举类型

    基本数据类型转换为引用类型对象 一个自动装箱的例子 Integer i=10; 相当于 Integer i=new Integer(10); 一个自动拆箱的例子 Integer m=10; int n ...

  3. Java中的自动拆装箱(转)

    出处: 一文读懂什么是Java中的自动拆装箱 本文主要介绍Java中的自动拆箱与自动装箱的有关知识.  基本数据类型 基本类型,或者叫做内置类型,是Java中不同于类(Class)的特殊类型.它们是我 ...

  4. 一文读懂什么是Java中的自动拆装箱

    基本数据类型 基本类型,或者叫做内置类型,是Java中不同于类(Class)的特殊类型.它们是我们编程中使用最频繁的类型. Java是一种强类型语言,第一次申明变量必须说明数据类型,第一次变量赋值称为 ...

  5. 什么是Java中的自动拆装箱

    1.基本数据类型 基本类型,或者叫做内置类型,是Java中不同于类(Class)的特殊类型.它们是我们编程中使用最频繁的类型. Java是一种强类型语言,第一次申明变量必须说明数据类型,第一次变量赋值 ...

  6. Java 从Character和char的区别来学习自动拆箱装箱

    本文结构 1.Character和char 的区别: 2.自动拆箱装箱 1.Character和char 的区别: Character是类,char基本数据类型. 在java中有三个类负责对字符的操作 ...

  7. WPF中多线程统计拆箱装箱和泛型的运行效率

    WPF中多线程统计拆箱装箱和泛型的执行效率.使用的知识点有泛型.多线程.托付.从样例中能够看到使用泛型的效率至少提升2倍 MainWindow.xaml <Window x:Class=&quo ...

  8. 关于Java自动拆箱装箱中的缓存问题

    package cn.zhang.test; /** * 测试自动装箱拆箱 * 自动装箱:基本类型自动转为包装类对象 * 自动拆箱:包装类对象自动转化为基本数据类型 * * * /*缓存问题*/ /* ...

  9. Java进阶之自动拆箱与自动装箱

    序. java基本类型介绍 java中,基本数据类型一共有8种,详细信息如下表: 类型 大小 范围 默认值 byte 8 -128 - 127 0 short 16 -32768 - 32768 0 ...

随机推荐

  1. java实现链表结构

    1. 定义节点node public class Node<T> { private Node<T> pre; private Node<T> next; priv ...

  2. thymeleaf 和其它标签组合 获取数据

    thymeleaf 有很多的内置标签, 但是我们在开发中会引入其它很多标签, 这个时候, 后台数据过来了,前端 页面要怎么显示呢? 网上资料真的很少. 不过还是找到了答案:  th:attr 这个标签 ...

  3. 关于java里小数点的保留

    关于java里小数点的保留 1.先给大家看一个代码. import java.util.*;import java.text.*; public class A { public static voi ...

  4. HDU5047Sawtooth(java大数)

    HDU5047Sawtooth(java大数) 题目链接 题目大意:在一个矩形内画n个"M".问如何画可以把这个矩形分成最多的区域. 给出这个区域的数目. 解题思路:最好的方式就是 ...

  5. Qss

    *{ font-size:13px; color:white; font-family:"宋体"; } CallWidget QLineEdit#telEdt { font-siz ...

  6. iOS-iPad开发之popoverController使用介绍

    iOS-iPad开发之popoverController使用介绍 iOS开发UI篇-popoverController使用注意 iOS SDK:自定义Popover(弹出窗口) 实现的简单例子: // ...

  7. 我是一块cpu 《转载》

    我是一块cpu,原装intel,在一台普通的台式计算机里供职.我有个小弟是内存,我要靠他时时刻刻陪伴我工作,其实有时候我并不是没有某某地址的资料,而是懒得翻--麻烦. 还有一个老大哥叫bios,每次那 ...

  8. The performance between the 'normal' operation and the 'shift' operation.

    First, I gonna post my test result with some code: //test the peformance of the <normal operation ...

  9. 监听指定端口数据交互(HttpListenerContext )

    很怀念以前做机票的日子,,,,可惜回不去 以前的项目中的,拿来贴贴 场景:同步第三方数据,监听指定地址(指定时间间隔,否则不满足,因为需要处理粘包问题,改篇未实现) 主要内容四个文件:下面分别说下每个 ...

  10. Web Service属性介绍

    每个 Web Service都需要唯一的命名空间,它可使客户端应用程序区分出可能使用相同方法名称的 Web Service.在 Visual Studio.NET中创建的Web Service的默认命 ...