`
awed
  • 浏览: 34842 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

自动装箱与拆箱的误用

    博客分类:
  • J2SE
阅读更多
自动装箱与拆箱的误用
在JAVA JDK1.5以后具有的自动装箱与拆箱的功能,所谓的自动装箱
与拆箱也就是把基本的数据类型自动的转为封装类型。
如:自动装箱,它可以直接把基本类型赋值给封装类型
Integer num = 10 ;
Double d = 2d ;
   
自动拆箱,它可以把封装类型赋值给基本类型
int num = new Integer(10);
double d = new Double(2d);
知道了自动装箱与拆箱后我们现看一下下面这两个程序代码:
AutoBoxDemo1.java
-------------------------------------------------------
public class AutoBoxDemo1 
{
public static void main(String[] args) 
{        
        Integer d1 = 100 ;
        Integer d2 = 100 ;
        if(d1==d2)
            System.out.println("d1==d2");
        else
            System.out.println("d1!=d2");
    }
}

AutoBoxDemo2.java
--------------------------------------------------------
public class AutoBoxDemo2 
{
public static void main(String[] args) 
{        
        Integer d1 = 200 ;
        Integer d2 = 200 ;
        if(d1==d2)
            System.out.println("d1==d2");
        else
            System.out.println("d1!=d2");
    }
}

大家看看这两个程序代码的结果是怎么样的呢?
其实在AutoBoxDemo1.java中结果是:d1==d2
在AutoBoxDemo2.java中结果是:d1!=d2
为什么结果会是这样的?我们来看了解一下!
其实刚刚这两个程序结果的不同是与==运算符比较有关,==是用来比较
两个基本数据类型的变量是否相等的,而事实上==也用于判断两个对象
变量名是否参考同一对象。在自动装箱时对于值从-128到127之间的值
它们被装箱为Integer对象后会在内存中重用,所以在AutoBoxDemo1.java
中是相等的,而超过了从-128到127之前的值时,被装箱后的Integer对象
并不会被重用。所以AutoBoxDemo2.java中是不相等的。
分享到:
评论

相关推荐

    浅谈Java自动装箱与拆箱及其陷阱

    Java中的自动装箱和拆箱是自JDK 1.5版本引入的一种语言特性,它极大地简化了基础数据类型(如int)与它们对应的包装类(如Integer)之间的转换过程。这一特性使得开发者无需手动创建包装类实例或使用显式类型转换,...

    thinking in Java

    4. **自动装箱和拆箱**:这个特性简化了基本类型与对应的包装类之间的转换。例如,int和Integer之间的转换不再需要手动调用Boxing和Unboxing方法。 书中还深入探讨了对象导向设计原则,如单一职责原则(SRP)、开放...

    java-puzzlers-sampler_java_Joshua_

    1. **类型转换与自动装箱拆箱**:Java中存在基本类型与其对应的包装类,如`int`与`Integer`。自动装箱与拆箱可以简化代码,但也会引入一些问题,例如在循环中使用`Integer`而非`int`可能会导致内存泄漏。 2. **变量...

    第数据类型与流程控制PPT学习教案.pptx

    装箱和拆箱是C#中处理值类型与引用类型之间转换的操作。装箱是将值类型转换为object类型,而拆箱则是将object类型转换回原来的值类型。对象类型(Object)是所有引用类型的基类,允许进行这些操作。 在C#中,常量有...

    linux下JDK1.5

    2. **Autoboxing and Unboxing(自动装箱与拆箱)**:自动将基本类型与对应的包装类之间进行转换,简化了编程。 3. **Enhanced for loop(增强型for循环)**:也称为foreach循环,简化了遍历集合的操作。 4. **...

    .NET Gotachas

    1. **类型转换与装箱拆箱**:.NET中的值类型和引用类型在转换时需要特别注意,尤其是涉及到装箱和拆箱操作时,可能会引发性能下降或意外的空引用异常。 2. **空引用(Null References)**:在处理对象时,未初始化...

    Java the Good Parts

    例如,自动装箱和拆箱功能可以简化开发过程中的类型转换操作,但也可能导致性能开销或意外的 NullPointException。 **3. 异常处理机制** Java 的异常处理机制是其一大特色,它通过 try-catch-finally 结构来捕获并...

    JavaPuzzlers:JavaPuzzlers的学习

    2. **自动装箱与拆箱**:Java中的基本类型与对应的包装类之间可以自动转换,但这也可能隐藏潜在的性能问题。比如,连续的装箱和拆箱操作可能导致不必要的对象创建。 3. **字符串常量池**:Java中的字符串具有特殊性...

    C#基础概念及详细分析

    22. 装箱与拆箱:装箱是将值类型转换为对应的引用类型,拆箱则是反向操作,需注意可能引发的异常。 23. 泛型:泛型提供了一种方式,使得代码能适用于多种类型,提高代码的重用性并确保类型安全。 24. async与await...

    Java_EE软件工程师就业求职手册

    - **int与Integer区别**:前者为基本类型,后者为包装类,涉及自动装箱和拆箱的概念。 - **原始数据类型分类**:整型、浮点型、字符型、布尔型等。 - **变量初始化**:明确初始值,防止未初始化使用导致程序错误。 ...

    java面试

    使用`Integer`时,可以利用Java的自动装箱/拆箱特性进行转换。 #### 三、String与StringBuffer **1. String与StringBuffer的区别** - **String**:不可变字符串,一旦创建后内容不可更改。 - **StringBuffer**:...

    Java面试宝典

    - **自动装箱与拆箱**:从Java 5开始,引入了自动装箱和拆箱机制,使得开发者可以在`int`和`Integer`之间自动转换。 - **null值处理**:`Integer`对象可以为`null`,这在处理不确定是否有值的情况时非常有用;而`int...

    优秀程序员之路—Csharp开发经验及技巧汇总.pdf

    它们提供了类型安全和更好的性能,避免了非泛型集合(如`ArrayList`)带来的装箱和拆箱开销。泛型集合确保了集合元素的类型一致性,减少了运行时错误的可能性,并提高了代码的可读性和可维护性。 总之,掌握这些C#...

    java-puzzlers源代码

    1. **类型转换和自动装箱拆箱**:Java中的基本类型与对应的包装类之间可以进行自动转换,但这种转换可能隐藏着一些潜在的问题,如精度丢失、隐式转型等。 2. **变量作用域**:Java中变量的作用域是严格控制的,包括...

    .net基础收集汇总

    这样可以保护对象内部状态不受外部干扰和误用,同时提供清晰的接口与对象通信。 继承:一种表达新创建的类(子类)继承另一个类(父类)特征和行为的机制。子类拥有父类的所有属性和方法,并可以扩展或重写父类的...

    JavaJava%BEE软件工程师就业求职手册.doc

    - **3.2.1 int和Integer的区别**:对比了基本类型`int`与包装类`Integer`之间的差异,包括自动装箱与拆箱的概念。 - **3.2.2 原始数据类型的分类**:概述了Java中的所有原始数据类型,并比较了它们的特性和适用...

Global site tag (gtag.js) - Google Analytics