`
dabing521
  • 浏览: 3521 次
  • 性别: Icon_minigender_1
文章分类
社区版块
存档分类
最新评论

自动装箱拆箱原理及使用误区

    博客分类:
  • java
 
阅读更多
自动装箱与拆箱
1.实际上在编译器编译过程中使用Integer.valueOf(xxx)转换成Integer对象
拆箱则是调用integer对象的intValue方法;(可以自行查看.class文件)

2.Integer.valueOf(xxx)
默认情况是-128~127返回原始值
超过范围则返回Integer对象,因此
Integer i = 200;
Integer j = 200;
i == j是false
查看下面的源码
public static Integer valueOf(int i) {
        assert IntegerCache.high >= 127;
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }


  
  static {
            // high value may be configured by property
            int h = 127;
            String integerCacheHighPropValue =
                sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
            if (integerCacheHighPropValue != null) {
                int i = parseInt(integerCacheHighPropValue);
                i = Math.max(i, 127);
                // Maximum array size is Integer.MAX_VALUE
                h = Math.min(i, Integer.MAX_VALUE - (-low));
            }
            high = h;

            cache = new Integer[(high - low) + 1];
            int j = low;
            for(int k = 0; k < cache.length; k++)
                cache[k] = new Integer(j++);
        }


从源码中可以看出high的值是可以在property中配置,因此对于两个Integer对象的比较最好使用equals方法。
3.那么什么时候使用自动装箱(autoboxing)和自动拆卸(unboxing)呢?
    在引用类型(也即是包装类)与原生数据类型之间存在 “阻抗失谐”时,比如你想将一个数值 放入到 collection中。包括Integer的初始值为null,int的默认值是0。当0有实际含义时用Integer是有必要的。
    在科学计算或者其他性能要求高的数字计算中,是不适合使用自动装箱(autoboxing)和自动拆卸(unboxing)。
分享到:
评论

相关推荐

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

    本文将深入探讨自动装箱与拆箱的原理、应用场景以及性能影响,并提供实用的编程技巧。 自动装箱和拆箱是Java语言中的重要特性,它们简化了基本数据类型与包装类之间的转换过程。然而,这两个机制也带来了一定的性能...

    什么是自动装箱和自动拆箱.xmind

    什么是自动装箱和自动拆箱

    java自动装箱拆箱深入剖析

    因此,在性能敏感的代码中,应当谨慎使用自动装箱和拆箱,并考虑是否使用基本数据类型而不是包装类来减少不必要的对象创建。 总的来说,自动装箱和拆箱是Java语言为了提高开发效率而引入的特性,它简化了基本类型和...

    JAVA装箱拆箱(很详细、易于理解)

    Java中的装箱和拆箱是面向对象编程中的一个重要概念,主要涉及到Java的自动类型转换机制。装箱是指将基本数据类型(如int、char、boolean等)转换为对应的包装器类对象,而拆箱则是相反的过程,即把包装器类的对象...

    java装箱拆箱.ppt

    java装箱拆箱.ppt java装箱拆箱.ppt

    《深入理解java虚拟机》自动装箱拆箱实例.doc

    1. **自动装箱与拆箱**:自动装箱是在使用包装类的地方自动插入包装类的构造函数,自动拆箱则是在使用基本数据类型的地方自动插入包装类的 `xxxValue()` 方法。 2. **对象比较**:`==` 操作符用于比较引用类型变量...

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

    自动装箱和拆箱特性仅存在于Java 5及更高版本中。在旧版本的Java中,你需要显式调用构造函数或转换方法来完成这些操作。 总结,自动装箱和拆箱是Java提高开发效率的重要特性,它们使得基本类型和包装类之间的转换变...

    详解Java 自动装箱与拆箱的实现原理

    Java自动装箱和拆箱的实现原理是 Java语言的一个重要特性,它使得开发者可以更加方便地使用原始类型和封装类之间的转换,但是同时也容易引发一些疑惑和错误。通过了解自动装箱和拆箱的实现原理,我们可以更好地使用...

    c#数值类型,转换和装箱拆箱

    为了深入理解这些知识点,阅读提供的"数据类型_4_值类型、引用类型、装箱和拆箱.pdf"和"数据类型_5_类型转换.pdf"文档将非常有帮助,它们会详细讲解这些主题,并提供实例说明,帮助你巩固理论知识并将其应用到实践中...

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

    在Java编程语言中,自动装箱(Autoboxing)和自动拆箱(Unboxing)是从Java 1.5版本开始引入的一项特性,其目的是简化原始类型...了解何时及如何正确使用自动装箱和拆箱,有助于编写出更高效、更健壮的Java代码。

    装箱与拆箱(一)

    例如,当你使用泛型列表(List)并传入值类型时,如果T是值类型,那么在添加元素时,会自动对这些值类型进行装箱。同样,当你从列表中取出元素时,会进行拆箱。为了优化这种情况,C#引入了泛型约束,如where T : ...

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

    下面通过具体的代码示例来进一步说明自动装箱和拆箱的使用方式: ```java // 自动装箱示例 int num = 10; // 定义一个基本类型变量 Integer integerNum = num; // 自动装箱,将基本类型转换为对应的包装类型 // ...

    万物之父和装箱拆箱练习题及参考答案

    万物之父和装箱拆箱练习题及参考答案

    装箱与拆箱(二)

    在C#编程语言中,装箱与拆箱是两种重要的操作,主要涉及到值类型与引用类型之间的转换。本文将深入探讨这两个概念,并结合...在编写高性能代码时,应谨慎使用这些操作,尽量减少不必要的装箱和拆箱,以优化程序效率。

    Java中自动装箱、拆箱引起的耗时详解

    Java中自动装箱、拆箱引起的耗时详解 Java中自动装箱和拆箱是Java语言中一个重要的特性,它可以将基本...本文详细介绍了自动装箱和拆箱的定义、示例、原理和耗时问题,并提供了一些解决方法,希望能够对读者有所帮助。

    C#语言中的装箱和拆箱操作

    C#语言中的装箱和拆箱操作 C#语言中的装箱和拆箱操作是类型系统中的核心概念,它们使得...在C#语言中,装箱和拆箱操作是非常重要的概念,它们使得我们可以更灵活地使用值类型和引用类型,并且提供了更多的编程可能性。

    Java中的自动装箱与拆箱:深入理解基本数据类型与对象的转换

    ### Java中的自动装箱与拆箱详解 #### 引言 在Java开发过程中,开发者经常需要处理各种数据类型之间的转换。对于基本数据类型与...理解这些特性的内部工作原理及应用场景可以帮助开发者写出更高效、更优雅的代码。

    详解Java包装类及自动装箱拆箱

    "详解Java包装类及自动装箱拆箱" Java 包装类是 Java 语言中的一种基本类型的封装体,它将基本类型的值“包装”到对象中,使基本类型的值能够包含在集合中,或者作为方法的返回值。Java 包装类有两个主要的目的:将...

    36装箱拆箱(1).rar

    在C#编程语言中,装箱(Boxing)和拆箱(Unboxing)是两个重要的概念,特别是对于理解和优化性能至关关键。装箱是将值类型(如int、bool、结构体等)转换为对象的过程,而拆箱则是将对象转换回其原始的值类型。在...

    C#示例:装箱、拆箱、自定义数据类型转换、ToString方法重载、类方法扩展

    装箱和拆箱涉及到内存分配和释放,因此应谨慎使用,避免不必要的性能开销。 2. 自定义数据类型转换 C#允许我们自定义数据类型之间的转换。这通常通过提供类型转换构造函数或`op_Explicit`和`op_Implicit`运算符实现...

Global site tag (gtag.js) - Google Analytics