`

Jave的autoboxing与autounboxing

    博客分类:
  • java
 
阅读更多
Java 自动装箱与拆箱
一:什么是自动装箱拆箱
基本数据类型的自动装箱(autoboxing)、拆箱(unboxing)是自J2SE 5.0开始提供的功能。

一般我们要创建一个类的对象的时候,我们会这样:

Class a = new Class(parameter);

  当我们创建一个Integer对象时,却可以这样:

 Integer i = 100; (注意:不是 int i = 100; )

实际上,执行上面那句代码的时候,系统为我们执行了:
Integer i = new Integer(100); 
此即基本数据类型的自动装箱功能。

二:基本数据类型与对象的差别
基本数据类型不是对象,也就是使用int、double、boolean等定义的变量、常量。

基本数据类型没有可调用的方法。

eg: int t = 1;      t.  后面是没有方法滴。

 Integer t =1; t.  后面就有很多方法可让你调用了。

三:什么时候自动装箱
 
 例如:Integer i = 100;

     相当于编译器自动为您作以下的语法编译:Integer i = new Integer(100);
四:什么时候自动拆箱
  自动拆箱(unboxing),也就是将对象中的基本数据从对象中自动取出。如下可实现自动拆箱:
Integer i = 10;        //装箱
int t = i;             //拆箱复制代码
在进行运算时,也可以进行自动装箱与拆箱。 

Integer i = 10;
System.out.println(i++);

Integer的自动装箱
//在-128~127 之外的数 
Integer i1 = 200;   
Integer i2 = 200; 
System.out.println("i1==i2: "+(i1==i2));
// 在-128~127 之内的数
Integer i3 = 100;
Integer i4 = 100;
System.out.println("i3==i4: "+(i3==i4));
输出的结果是:
i1==i2: false    i3==i4: true复制代码


说明:
equals() 比较的是两个对象的值(内容)是否相同。
"==" 比较的是两个对象的引用(内存地址)是否相同,也用来比较两个基本数据类型的变量值是否相等。

在自动装箱时,对于值从–128到127之间的Byte,Integer,Long值,它们被装箱为Byte,Integer,Long对象后,会缓存在内存中,被重用(
所以范例中,i3 与 i4实际上参考至同一个对象),如果超过了从–128到127之间的值,被装箱后的Byte,Integer,Long对象并不会被重用,
即相当于每次装箱时都新建(new)一个Byte,Integer或Long对象(所以范例中,i1与i2参考的是不同的对象)。
Character因为类型的特殊性,缓存的是0-127之间的对象。

Boolean类型中直接缓存了两个Boolean对象,TRUE和FALSE,这样使用valueOf()方法时只需要直接返回这两个对象中的一个,
而不是每次调用的时候都用new,这也就是文档里所说的通过缓存经常请求的值二显著提高空间和时间性能.


另外,当不使用自动装箱功能的时候,情况与普通类对象一样,请看下例:
Integer i3 = new Integer(100); 
Integer i4 = new Integer(100);
System.out.println("i3==i4: "+(i3==i4));//显示false
 

五:String 的拆箱装箱
先看个例子:
String str1 = "abc";
String str2 = "abc";
System.out.println(str2==str1);  //输出为 true 
System.out.println(str2.equals(str1));  //输出为 true 
String str3 = new String("abc");
String str4 = new String("abc"); 
System.out.println(str3==str4);  //输出为 false
System.out.println(str3.equals(str4));  //输出为 true 

这个怎么解释呢?貌似看不出什么。那再看个例子。
String d ="2";
String e = "23";
e = e.substring(0, 1);
System.out.println(e.equals(d));       //输出为 true
System.out.println(e==d);           //输出为 false  
第二个例子中,e的初始值与d并不同,因此e与d是各自创建了个对象,(e==d)为false 。
同理可知,第一个例子中的str3与str4也是各自new了个对象,而str1与str2却是引用了同一个对象。

转自:
http://www.cnblogs.com/danne823/archive/2011/04/22/2025332.html
分享到:
评论

相关推荐

    关于Java自动装箱(autoboxing)的一些意想不到的结果

    Java的自动装箱功能极大地简化了基本数据类型与它们对应的包装类之间的相互转换。然而,这一特性可能会引起一些不易察觉的副作用,这些副作用往往是由于JVM对某些包装类对象实现了缓存机制所致。 1. ==和equals行为...

    《HEADFIRSTJAVA》--深入浅出Java说明与归纳.pdf

    11. Java版本特性:文档中提到了Java 1.5版本的一些新特性,如autoboxing和泛型。 12. Java GUI:Java使用Swing库来创建图形用户界面(Graphical User Interface, GUI)。Swing中的组件如JFrame、JButton、JLabel等...

    GitHub 上标星 115k+ 的 Java 教程.pdf

    本文将对 Java 的基础知识点进行总结和解释,涵盖了Java 的基本数据类型、String 相关知识点、Object 方法、基本运算符、Autoboxing 和 Unboxing 等。 一、基本数据类型 Java 中的基本数据类型包括 byte、char、...

    java的jre1.5

    其次,自动装箱和拆箱(Autoboxing/Unboxing)是Java 5.0的另一个关键特性。自动装箱是指将基本类型与对应的包装类之间进行自动转换,而自动拆箱则是将包装类对象转换回基本类型,这让开发人员在处理数据类型转换时...

    JAVA5/JAVA6新特性

    **自动装箱与拆箱(Autoboxing and Unboxing)** 自动装箱和拆箱简化了基本类型与对应的包装类之间的转换,使得代码更加简洁。 #### 5. **增强的for循环(For-Each Loop)** 也称为foreach循环,用于遍历集合、...

    OCJP认证-3期(PX017) 面向对象程序设计-Autoboxing.doc

    面向对象程序设计是Java编程的核心,而Autoboxing(自动装箱)是Java SE 5.0引入的一个重要特性,它极大地简化了基本数据类型与它们对应的包装类之间的转换过程。在Java中,每个基本数据类型都有一个对应的包装类,...

    Java The Complete Reference ,11th Edition.pdf

    Enumerations, autoboxing, and annotations The I/O classes Generics Lambda expressions Modules String handling The Collections Framework Networking Event handling AWT Swing The Concurrent API The ...

    Java中的自动装箱与拆箱Java开发Java经验技巧共6

    在Java编程语言中,自动装箱(Autoboxing)和自动拆箱(Unboxing)是两个重要的特性,它们简化了基本类型(如int、double等)与对应的包装类(如Integer、Double等)之间的转换过程。这些特性是在Java 5引入的,极大...

    java jdk 1.5.0

    2. **自动装箱与拆箱(Autoboxing/Unboxing)**:Java 1.5.0引入了自动装箱和拆箱机制,使得基础数据类型与对应的包装类之间可以无缝转换,简化了开发者的编码工作。 3. **枚举(Enums)**:Java 1.5.0提供了枚举...

    java jdk 1.5 windows

    3. **自动装箱与拆箱(Autoboxing and Unboxing)**:自动装箱是指将基本数据类型与对应的包装器类之间进行隐式转换,反之为拆箱。这一特性简化了基本类型与对象之间的操作。 4. **变量赋值检查(Enhanced For Loop...

    Thingking In Java 第四版 英文版

    此外,《Thinking In Java》第四版还对Java 5.0及以上版本的新特性给予了关注,包括注解(Annotations)、枚举类型(Enumerations)、自动装箱(Autoboxing)等。这些新特性的介绍帮助读者了解和掌握最新Java版本的...

    Java-jdk1.5安装包

    四、自动装箱与拆箱(Autoboxing/Unboxing) 在JDK1.5之前,将基本类型与对应的包装类进行转换需要手动操作。Java 5.0引入了自动装箱和拆箱,使得这种转换更加便捷。例如,int和Integer之间的转换可以自动完成,简化...

    Java JDK 5.0学习笔记

    三、自动装箱与拆箱(Autoboxing and Unboxing) Java 5.0引入了自动装箱和拆箱特性,使得基本类型和其对应的包装类之间可以无缝转换。例如,int和Integer之间的转换无需手动进行Boxing(包装)和Unboxing(拆箱)...

    良葛格JAVA学习笔记

    另外,"Autoboxing/Unboxing(自动装箱/拆箱)"简化了基本类型与包装类之间的转换,使得操作更加简便。 此外,Java 5.0还引入了"Annotations(注解)",这是一种元数据,可以为编译器和Java虚拟机提供额外的信息,...

    java api java爱好者最爱 api java 开发工具

    2. **Autoboxing/Unboxing(自动装箱与拆箱)**:Java 5.0引入了自动装箱和拆箱机制,使得基本类型与对应的包装类之间可以无缝转换,简化了代码。 3. **Annotations(注解)**:注解是一种元数据,可以添加到代码的...

    HTML的java帮助文档

    2. **Autoboxing/Unboxing(自动装箱/拆箱)**:自动装箱允许在基本类型与对应的包装类之间进行无缝转换,简化了代码。 3. **枚举(Enums)**:枚举类型提供了一种定义常量集的新方式,增强了代码的可读性和安全性...

    Java自动装箱与拆箱深度解析:原理、应用与性能考量

    在Java编程中,自动装箱(Autoboxing)和自动拆箱(Unboxing)是两个非常核心的概念,它们允许基本数据类型和它们对应的包装类之间无缝转换。这种转换机制在Java 5中引入,极大地简化了代码编写,但同时也带来了一些...

    最新JAVA1.5中文API

    3. **自动装箱与拆箱(Autoboxing/Unboxing)**:这一特性简化了基本类型与对应的包装类之间的转换。例如,你可以直接将一个int赋值给Integer对象,而无需手动调用`Integer.valueOf()`。 4. **变量参数(Varargs)*...

    JAVA 5.0 TIGER程序高手秘笈.rar

    3. **Autoboxing和Unboxing(自动装箱与拆箱)**:Java 5.0自动实现了基本类型与对应的包装类之间的转换。当基本类型与对象之间需要进行操作时,系统会自动进行装箱和拆箱,简化了代码,减少了程序员的工作负担。 4...

Global site tag (gtag.js) - Google Analytics