`
mlc0202
  • 浏览: 106295 次
  • 来自: 北京
社区版块
存档分类
最新评论

说说java的自动装箱(autoboxing)和拆箱(unboxing)

 
阅读更多

Adversity makes a man wise, not rich. 逆境出人才

java作为面向对象语言,有人认为所看到的都是对象,事实上,在javase5之前,基本类型默认并不是采用对象存在的如果您想要把基本类型作为对象来处理,就必须自行转换,不过,在javase5之后,为基本数据类型提供了自动装箱和拆箱功能,使得将基本类型转换为对象变得极其便捷。

在这里来捋一捋java的基本数据类型,不理不要紧,一理才发现俺也掌握的不是那么明确,在这里俺也再次学习下
总计有八个,分别是
byte字节型(一个字节),char字符型(两个字节),short短整型(两个字节),int整型(四个字节),
long长整型(八个字节),float浮点型(四个字节),double 双精度浮点型(八个字节),boolean型(一个字节)

 在javase5之前,如果想要把基本数据类型作为对象来操作,就需要采用对应的对象,来把它们打包才行

现在虽然不用这样了,但其中也有一些要注意的地方,俺揪出来晒晒

   先说说类和对象,建立个概念吧先

类--可以认为是对象的设计图
对象--是按照设计图实现了的具体工具
先这么简单理解吧,如果真要扯开了说,那可是软件工程里面的一门专业课,我们有个概念就好

    之所以要将基本类型数据打包成为对象,原因很简单,是因为对象可以携带更多的数据

手动、自动装箱拆箱示例

    Long,Integer,Double,Float,Boolean等等的类就是所谓的wrapper类,就跟wrapper这个单词所代表的意思一样,就是提供一个“包装,加壳”,把基本数据类型放在里面,来看代码,体会下先

 

public class WrapperDemo{
	public static void main(String[] args){
	     int data1=21;
		 int data2=24;
		 //打包成为对象
		 Integer data1Wrapper = new Integer(data1);
		 Integer data2Wrapper = new Integer(data2);
		 //原始数据直接除以3
		 System.out.println(data1/3);
		 //将数据打包,转换为double型,除以3
		 System.out.println(data1Wrapper.doubleValue()/3);
		//比较
		System.out.println(data1Wrapper.compareTo(data2Wrapper));
	}

}
 

      图1-1是WrapperDemo的运行结果

   
  
       图1-1  WrapperDemo的运行结果

  通过上面的代码和运行结果,看到了将基本数据类型打包成为对象带来的好处了吧,别着急,这还只是javase5之前的做法,在javase5之后就已经支持自动装箱和拆箱了

 ,在这,就不再单独写代码出来了,只写几个能说明问题的语句就可以了,相信很容易理解的

javase5之前,手动打包
Integer data1 = new Integer(10);
事项将基本类型数据转换为对象
javase5之后,支持自动打包
Integer data1 = 10;
便可以实现将基本类型的数据转换为对象
eg:
    在上面的代码中,可以采用,可以直接进行两个基本数据类型的比较
    data1.compareTo(data2);
   基本数据类型本身没有什么方法,当你运行之后会发现,它仍然可以正确运行,这就自动装箱和拆箱带来的好处
 

再来说说自动装箱拆箱

    自动装箱和拆箱,从本质上讲,是编译器帮了我们的忙,这就是所谓的“编译器蜜糖”,既然这么好,是不是就可以放心的用了呢?

先别着急,喝口水,咱再接着唠

    看看下面的情况,您是否了解

 

Integer i = null;//表明i没有参考至任何对象
int j = i ;//相当于 int j = i.intValue()
这样的代码,编译时是可以通过的,因为它的语法是正确的,但在运行时,就会排除NullPointerException错误,这是由于i并没有参考至任何对象造成的
 
个人建议,如果您对装箱拆箱不是理解的很清楚,最好还是按部就班的一步一步的对它进行装包和拆包,这样,有的时候,可能会为你节省很多纠错的时间哦

 还是自动装箱拆箱

public class BoxDemo{
   public static void main(String[] args){
    Integer data1 = 500;
	Integer data2 = 500;
	System.out.println(data1==data2);
   }
}

   在你看到接下来的运行结果前,您先猜猜看,运行的结果会是怎样的呢?true or false?

   图1-2是代码运行的结果

 
  
              图1-2  BoxDemo运行结果

   false?没错,它就是false,自动装箱时,对于值从-128-127之间的数,被装箱后,会被放在内存中进行重用,

如果超出了这个值的范围就不会被重用的,所以每次new出来的都是一个新的对象,结果自然会是false

 

在这里,区别一个概念“==”和equals()
    “==”是比较两个对象是不是引用自同一个对象
     “equals()”是比较两个对象的内容
这个一定得搞清楚,否则,在遇到问题的时候,可真是会让人抓狂的
 

 

 

 

 

 

 

 

 

 

  • 大小: 2.7 KB
  • 大小: 2.2 KB
  • 大小: 2 KB
分享到:
评论
1 楼 ^=^ 2017-05-02  
原来是数字自动转换为对象的意思啊,这样岂不是重用内存变多了。

相关推荐

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

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

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

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

    Java中的自动装箱和拆箱是什么?它们有什么作用?(java面试题附答案).txt

    在Java中,自动装箱(Autoboxing)和拆箱(Unboxing)是Java编译器提供的一种特性,用于在基本数据类型和对应的包装类之间进行自动转换。这种特性简化了编程过程中的类型转换操作,使得代码更为简洁易读。 **自动...

    Java中的自动装箱与拆箱_.docx

    在Java编程语言中,自动装箱(Autoboxing)和自动拆箱(Unboxing)是从Java 1.5版本开始引入的一项特性,其目的是简化原始类型(Primitive Types)与它们对应的包装类(Wrapper Classes)之间的转换过程。...

    java编程中自动拆箱与自动装箱详解

    Java编程中自动拆箱与自动装箱详解 ...自动装箱和自动拆箱是Java编程中重要的数据类型转换机制,可以简化代码,提高开发效率。但是,需要注意自动装箱和自动拆箱的应用场景和注意事项,以确保程序的正确性和性能。

    Java语言 包装类讲解案例代码 ( 设计目的(作用)和用途、自动装箱与拆箱、常用方法、 null和默认值)

    自动装箱与拆箱:自动装箱(Autoboxing)指的是自动地将基本数据类型转换为对应的包装类对象;自动拆箱(Unboxing)则是将包装类对象自动转换为基本数据类型。 常用方法:演示如何使用包装类中的这些常见方法。 null...

    AutoBundle.zip

    在编程领域,自动装箱和拆箱是面向对象语言中的一种特性,主要应用于基本数据类型与它们对应的引用类型之间的转换。这个"AutoBundle.zip"文件很可能包含了一个关于自动装箱和拆箱的示例项目或者教程,名为...

    BankingApplication:自动装箱,拆箱,包装器概念

    在Java编程语言中,"自动装箱"和"拆箱"是两个重要的概念,它们与"包装器类"紧密相关。这些概念对于理解和编写高效、可靠的代码至关重要,尤其是在处理基本数据类型与对象之间的转换时。在BankingApplication项目中,...

    java学习笔记JDK6课件之四

    在Java编程语言中,JDK 6版本引入了许多特性,其中自动装箱和拆箱是提升开发效率的重要改进。本文将深入探讨这些知识点,并通过实际示例帮助新手更好地理解和运用。 1. **自动装箱(Autoboxing)** 自动装箱是指将...

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

    由于`testIfB("true")`会返回一个`Boolean`对象,`if`语句的条件部分是允许的,因为Java支持Autoboxing和Unboxing(自动拆箱),即将`Boolean`对象转换为`boolean`基本类型进行逻辑判断。因此,当`testIfA`被调用时...

    Java JDK 5.0学习笔记

    3. **自动装箱与拆箱(Autoboxing/Unboxing)**:Java 5.0引入了自动装箱和拆箱机制,使得基础数据类型和对应的包装类之间可以无缝转换。例如,一个整数可以直接赋值给Integer对象,反之亦然,这简化了代码并减少了...

    JAVA学习笔记最新ppt版4

    首先,自动装箱(AutoBoxing)和拆箱(Unboxing)是Java 5.0引入的一项新特性,它简化了基本类型与对应的包装器类型之间的转换。例如,你可以直接将一个int类型的值赋给Integer类型的变量,反之亦然。这样就避免了手动...

    java jdk 1.5 API html

    4. **自动装箱与拆箱(Autoboxing and Unboxing)** 自动装箱和拆箱简化了基本类型与对应的包装类之间的操作。在Java 1.5之前,需要手动进行装箱和拆箱,而1.5之后,系统会自动进行这些转换,提高了代码的简洁性。 ...

    java第五版课后答案

    3. **自动装箱/拆箱(Autoboxing/Unboxing)**:自动装箱和拆箱使得基本类型与对应的包装类之间可以无缝转换,简化了编程。 4. **增强的for循环(Enhanced For Loop)**:也称为foreach循环,使得遍历数组和集合...

    java的jre1.5

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

    Java-jdk1.5安装包

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

    JAVA 5.0 TIGER程序高手秘笈.rar

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

Global site tag (gtag.js) - Google Analytics