`

Java中包装类的一些注意点

 
阅读更多
  •  java中8种基本类型变量对应的包装类:

byte -- Byte

short -- Short          

int  --  Integer

long -- Long

float -- Float

Double -- Double

boolean -- Boolean

char -- Character   

 

  • 包装类型的自动拆箱与自动装箱实现原理

          从JDK1.5之后java引入了自动装箱与自动拆箱技术。

          一般我们产生一个对象都是通过new的形式,而包装类型的自动装箱则是这样:

Long t1 = 1000L;

 

         不必感到诧异,其实底层在编译阶段就把上述代码改成:

Long t1 = Long.valueOf(1000L);

   ---------------------------------------------------------------------------------------------------

         拆箱机制:

long t2 = t1;

 

 拆箱底层编译期实现:

long t2 = t1.longValue();

 

       以上就是包装类型的拆箱以及装箱的原理。

 

 

  • 包装类型缓存区的使用

对于Byte、Short、Integer、Long、Character这几种包装类型,当自动装箱的数值在[-128, 127]之间时,不会去创建对象而是从各自对应的缓存区中返回对象,例如:

		Long t1 = 128L;   
		Long t2 = 128L;
		System.out.println(t1 == t2);  //false,t1、t2均由new产生新的对象。
		
		Long t3 = 127L;
		Long t4 = 127L;	
		System.out.println(t3 == t4);  //true,从缓存区中取出返回的是同一个对象,==比较的是地址值,所以这里当然返回true了。

 

 实现原理:因为自动装箱会使用各自包装类的valueOf(),这里只给出Long包装类型底层实现。

    public static Long valueOf(long l) {
        final int offset = 128;
        if (l >= -128 && l <= 127) { // will cache
            return LongCache.cache[(int)l + offset];
        }
        return new Long(l);
    }

    private static class LongCache {
        private LongCache(){}

        static final Long cache[] = new Long[-(-128) + 127 + 1];

        static {
            for(int i = 0; i < cache.length; i++)
                cache[i] = new Long(i - 128);
        }
    }

 

 

 

 

 

 

2
0
分享到:
评论

相关推荐

    Java学习资料-包装类

    以下是关于Java包装类的详细知识: 1. **包装类的定义与作用** - Java的8个基本数据类型包括byte、short、int、long、char、float、double和boolean。每个都有其对应的包装类,分别是Byte、Short、Integer、Long、...

    Java包装类原理与用法实例分析

    在使用Java包装类时需要注意自动装箱赋值时可能出现的pitfall,即使用自动装箱赋值时,可能会出现-128到127的数值被静态处理的情况,因为Java中的Integer类对-128到127的数值进行了静态处理,这些数值被缓存在数组...

    Java面向对象(高级)- 包装类(wrapper)的使用

    包装类的主要作用是将基本数据类型转换为对象,以满足Java中只针对对象设计的API和新特性的需求,如泛型、接口等。在面向对象编程中,包装类提供了更多的功能和便利。 二、包装类的使用 1. 自定义包装类:虽然Java...

    Java 一些值得注意的细节

    Java编程语言以其强大的跨平台能力和丰富的库而广受开发者...以上就是Java编程中一些值得注意的细节,熟练掌握这些知识点,能够让你的Java代码更加健壮、高效。在实践中不断学习和总结,你会成为更优秀的Java开发者。

    Java中包装类介绍与其注意事项

    Java中的包装类是面向对象编程的关键元素,它们为Java的基本数据类型提供了面向对象的特性。在Java中,有八种基本数据类型:byte、short、int、long、float、double、char和boolean,每种都有对应的包装类,分别是...

    JAVA开发规范,开发注意事项

    - 避免使用原始类型,尽可能使用对应的包装类,以利用Java的自动装箱拆箱特性。 6. **设计模式**: - 学习并理解常见的设计模式,如单例、工厂、观察者等,它们是解决常见问题的最佳实践。 7. **模块化**: - ...

    Java常用的基础类

    包装类是 Java 语言中最基本的类之一,它将基本数据类型封装为对象。每个基本数据类型都有对应的包装类,例如 Boolean 对应 boolean、Byte 对应 byte、Short 对应 short、Integer 对应 int、Long 对应 long、...

    Java API文档 中文网页版

    1. `java.lang`:这是所有Java程序的基础包,包含了基本类型包装类、Object类、String类、Math类等核心类。 2. `java.util`:包含各种实用工具类,如集合框架(List、Set、Map)、日期时间类、队列、堆栈、枚举等。...

    Java基础知识注意点

    这些包装类提供了一些额外的方法,比如转换字符串为相应的数值类型。 #### 三、输入输出操作 Java中的输入输出操作主要依赖于`System.out`进行输出,以及使用`Scanner`类进行输入: ```java // 输出操作 System....

    javazip压缩类

    JavaZip压缩类是Java编程语言中用于处理ZIP文件格式的核心工具,主要集中在java.util.zip包中。这个包提供了多种类和接口,使得开发者能够轻松地对数据进行压缩和解压缩,尤其是在开发需要处理大量数据的应用时,如...

    Java常用类和枚举类型.pdf

    在Java编程语言中,为了能够把基本数据类型当作对象处理,提供了包装类的概念。包装类是将基本数据类型封装成类的形式,使它们可以拥有对象的特性。Java语言中一共有八个基本数据类型,它们分别是byte、short、int、...

    Java学习教程-java中number类浅析.docx

    在Java语言中,`Number`类是一个抽象类,所有的基本数据类型的包装类(如`Integer`、`Long`、`Byte`、`Double`、`Float`、`Short`等)都是它的子类。`Number`类提供了多种方法来处理这些数据类型,包括类型转换、...

    Java中如何使用字符串来实例化类以及调用类

    在使用反射时,有一些重要的点需要注意: - `Class.forName()`可能会抛出`ClassNotFoundException`,这是因为如果类路径中找不到指定的类,就会发生这种情况。 - 在调用`invoke()`方法时,必须确保参数类型与方法...

    Java中的包机制

    ### Java中的包机制详解 ...此包包含了构成Java编程基础的类和接口,如`Object`、`String`、基本数据类型包装类等,是Java程序不可或缺的一部分。理解并熟练运用包机制,将有助于开发者构建更加健壮、灵活的Java应用。

    解决Java包装类比较时遇到的问题

    在 Java 中,包装类的比较时会遇到一些问题,本文将对这些问题进行详细的介绍和解决方法。 一、包装类比较的注意事项 在 Java 中,包装类的比较时,不会自动拆包,而是地址比较。这意味着,如果两个包装类的值相同...

    java中Integer包装类装箱的一个细节详解

    在Java编程语言中,Integer是int基本数据类型的封装类,提供了许多高级功能和与对象相关的操作。自从Java 5引入自动装箱和拆箱机制以来,我们可以在代码中方便地在int和Integer之间进行转换。然而,对于Integer的...

    java编码注意点

    以下是一些重要的Java编码注意事项: 1. **单例模式的使用**:单例模式是一种设计模式,它限制一个类只能有一个实例。这种模式适用于控制资源的访问、限制实例创建以及实现跨线程的数据共享。然而,并非所有场景都...

    从C++转到Java需注意的地方

    在Java中,使用包装类来封装基本类型,并且没有指针的概念,而是使用引用。这意味着在Java中,不能像C++那样直接操作内存地址。 3. **多态性与接口** Java中的多态性是通过继承、接口和抽象类实现的。Java允许一个...

    Java常用类day09.docx

    Java中的包装类是针对Java的基本数据类型而设计的,它们为每个基本数据类型提供了一个对应的类,例如`int`对应`Integer`,`double`对应`Double`等。包装类的引入主要有以下好处: 1. **方法扩展**:包装类提供了...

    Java学习笔记,常用类

    值得注意的是,对于整型包装类`Integer`和`Character`,在-128至127的范围内,Java提供了一种缓存机制。当这个范围内数值的包装类对象被创建时,它们会被存储在一个内部数组`cache`中,以提高性能,避免重复创建对象...

Global site tag (gtag.js) - Google Analytics