一、基本类型打包器

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. 看个人思路吧,清晰的话就简单 CodeForces 271A - Beautiful Year

    It seems like the year of 2013 came only yesterday. Do you know a curious fact? The year of 2013 is ...

  2. soapUI的使用

    首先下载soapUI下载地址在网上能够搜的到  windows下载这个soapUI-x32-3_5.exe(中间的数字是版本,能够下载最新的,这个已经有了JMS的測试功能)  首先得有一个webser ...

  3. 在hibernate中使用SQL语句

  4. Mysql新建用户和数据库并授权

    测试环境:Centos 6.3和Mysql 5.3 一.新建用户 //登录MYSQL@>mysql -u root -p@>密码//创建用户mysql> insert into my ...

  5. python模拟登陆之下载

    好长时间没有更新博客了,哈哈. 今天公司给了这么一个需求,现在我们需要去淘宝获取上一天的订单号,然后再根据订单号去另一个接口去获取订单详情,然后再给我展示到web! 中间涉及到的技术点有: 模拟登陆 ...

  6. objective-c 中的关联介绍

    objective-c 中的关联介绍 转载请注明CSDN博客上的出处: http://blog.csdn.net/daiyibo123/article/details/46471993 如何设置关联 ...

  7. [转] 函数编程之闭包漫谈(Closure)

    在函数编程中经常用到闭包.闭包是什么,它是怎么产生的及用来解决什么问题呢.给出字面的定义 先:闭包是由函数及其相关的引用环境组合而成的实体(即:闭包=函数+引用环境).这个从字面上很难理解,特别对于一 ...

  8. Java和C++在细节上的差异(转)

    Java的基本程序结构.关键字.操作符都和C/C++非常相似,以下为主要的几点区别: 一.基本程序设计结构: Java的基本程序结构.关键字.操作符都和C/C++非常相似,以下为主要的几点区别: 1. ...

  9. DIV------使用 <div> 元素的网页布局

    <!DOCTYPE html> <html> <head> <style type="text/css"> div#containe ...

  10. AndroidStudio工程文件导入Jar包和So第三方库

    AndroidStudio 导入Jar包和第三方So库 在android开发中,需要导入许多第三方的jar包和so库来支持,包括像许多第三方的支持平台--友盟,环信.融云.极光推送.微博.腾讯等第三方 ...