`

Java中包装类和原生类型

    博客分类:
  • Java
阅读更多
1. Java中包装类和原生类型

8个原生类型分别是:byte, short, int, long, float, double, char, boolean。

8个包装类分别是:Byte, Short, Integer, Long, Float, Double, Character, Boolean。

原生数据类型与包装类型的双向转换
自动转型总原则:byte,short,char(同级)-> int -> long -> float -> double (由低精度到高精度)
public class IntegerTest{
    public static void main(String[] args){
        int a = 10;
        Integer integer = new Integer(a);
        int b = integer.intValue();
        System.out.println(a == b);
    }
}
运行结果:
true


2. Java中自动装箱和拆箱

装箱就是自动将基本数据类型转换为包装器类型 Integer i = 10;
拆箱就是自动将包装器类型转换为基本数据类型 int n = i;

装箱过程是通过调用包装器的valueOf方法实现的
拆箱过程是通过调用包装器的 xxxValue方法实现的(xxx代表对应的基本数据类型)

Integer类有一个缓存,它会缓存介于-128~127之间的整数。Integer.valueof()方法会将缓存值返回,不会生成新的对象。
在装箱时,valueOf方法会被自动调用:如果整型字面值在[-128,127]之间,便返回 IntegerCache.cache(在类加载时就自动创建)中已经存在的对象的引用;否则,创建一个新的Integer对象并返回。
public class BoxTest {
    public static void main(String[] args){
        Integer i1 = 100;
        Integer i2 = 100;
        if(i1 == i2){
            System.out.println("i1 == i2");
        }else{
            System.out.println("i1 != i2");
        }
    }
}
运行结果:i1 == i2
public class BoxTest {
    public static void main(String[] args){
        Integer i1 = 200;
        Integer i2 = 200;
        if(i1 == i2){
            System.out.println("i1 == i2");
        }else{
            System.out.println("i1 != i2");
        }
    }
}
运行结果:i1 != i2

Double就没有这种情况,是因为在某个范围内的整型数值的个数是有限的,而浮点数却不是。

Integer、Short、Byte、Character、Long 这几个类的valueOf方法的实现是类似的,有限可列举,共享[-128,127];
Double、Float的valueOf方法的实现是类似的,无限不可列举,不共享;
Boolean的valueOf方法的实现不同于以上的整型和浮点型,只有两个值,有限可列举,共享;

Integer i = new Integer(xxx); 不会触发自动装箱;
Integer i = xxx; 会触发自动装箱;执行效率和资源占用在一般性情况下([-128,127])要高


详细参考博客: https://blog.csdn.net/justloveyou_/article/details/52651211
分享到:
评论

相关推荐

    java SE(入门知识4)原生数据类型使用陷阱.docx

    - 自从Java 5引入了自动装箱和拆箱机制,原始类型和它们对应的包装类之间可以方便地转换。例如,`Short a = 1;`实际上是将`int`类型的`1`自动装箱为`Short`对象。但需要注意的是,这种转换在某些情况下可能会导致...

    基于 java swing 开发的资源管理器。使用 java swing 美化包beautyeye对原生的 java.zip

    在本项目中,开发者利用BeautyEye库对传统的Java ZIP功能进行了包装,使得用户在处理压缩文件时可以享受到更为精致的视觉体验。 【详细知识点】 1. **Java Swing**:Swing是Java AWT(Abstract Window Toolkit)的...

    java程序员面试宝典.txt

    在Java中,存在原生数据类型(如`int`、`long`)和它们对应的包装类(如`Integer`、`Long`)。包装类提供了更多的功能,比如可以作为集合中的元素,而原生类型不能。Java为每种原生类型都提供了一个包装类,例如`...

    qtjambi5:QtJambi是在Java中使用Qt的包装器

    这意味着C++编写的Qt库被转化为可以在Java代码中调用的类和方法,使得Java开发者可以直接操作Qt对象,就像它们是原生的Java对象一样。 3. **QtC++** QtC++是Qt库的基础,是用C++编写的一套面向对象的库。QtC++包含...

    java中equals和==的区别.pdf

    例如,当比较基本数据类型的包装类和它们对应的原生数据类型时,会自动拆箱为原生类型,然后使用"=="运算符进行比较: ```java int a = 3; Integer b = 3; System.out.println(a == b); // true,自动拆箱后比较 ``...

    swig实例java调用c

    在Java与C/C++的交互中,Swig通常会生成一个JNI(Java Native Interface)头文件和一个C/C++源文件,这两个文件包含了调用原生代码所需的接口。 1. **Swig的使用流程**: - 首先,你需要有一个C/C++库,其中包含你...

    ReactNative与Android原生简单交互

    4. **创建原生模块**:在Android Studio中,开发者可以创建一个新的Java类,继承自`ReactContextBaseJavaModule`或`ReactNativeHost`,并在其中注册自定义的方法。这些方法会在JavaScript中通过`NativeModules`对象...

    Java与C++的比较

    Java在自动装箱和拆箱机制下,可以将基本数据类型和它们的包装类之间自动转换。而C++支持操作符重载,使得对运算符的使用更为灵活。 3. 继承与多态: Java和C++都支持单继承和多态,但是Java中所有类都隐式继承自...

    Java2核心技术卷1:基础知识

    14. **包装类与原生类型**:了解Integer、Character等包装类与int、char等原始类型的相互转换。 通过学习这些知识点,初学者可以建立起坚实的基础,为进一步深入学习Java的高级特性,如JVM内存模型、Spring框架、...

    Java面试题、面经.pdf

    ### Java面试题精析 ...- 自动装箱和拆箱在Java 5之后引入,简化了基本类型和包装类之间的转换。 这些知识点覆盖了Java面试中的基础知识部分,理解并掌握它们对于准备Java相关的技术面试至关重要。

    java技术体系图

    - **自动装箱拆箱**:简化了基本数据类型和其包装类之间的转换。 - **枚举类**:提供了更安全的方式来表示一组固定值的常量。 - **可变参数**:使得函数能够接受可变数量的参数。 - **可变返回类型**:允许方法返回...

    java笔试面试题集锦

    11. **基本类型与包装类**:int 是 Java 的基本数据类型,Integer 是其对应的包装类。基本类型直接存储值,而包装类是对象,可以参与对象间的操作,如 null 分配。 12. **int 和 Integer 的区别**:int 是原始类型...

    JavaLauncher

    1. **包装Java应用**:JavaLauncher将Java主类(通常包含在MANIFEST.MF文件中指定的`Main-Class`属性)及其依赖的类库打包成一个独立的.exe文件。这个过程包括对所有必要的类文件、资源文件以及第三方库的处理。 2....

    最新Java面试题视频网盘,Java面试题84集、java面试专属及面试必问课程

    │ Java面试题41.jQuery中Ajax和原生js实现Ajax的关系.mp4 │ Java面试题42.简单说一下html5.mp4 │ Java面试题43.简单说一下css3.mp4 │ Java面试题44.bootstrap的是什么.mp4 │ Java面试题45.什么是框架.mp4 │ ...

    java笔试,很全面的java笔试题

    - **原生类型与包装类**:Java为每种基本数据类型提供了相应的包装类,如`int`与`Integer`,`boolean`与`Boolean`等。这些包装类提供了一些额外的功能,比如将基本类型转换为字符串,以及支持null值。使用包装类时,...

    用 Java 编写的 Gitlab API 包装器.zip

    Javadoc是一种基于Java语言的文档生成工具,它可以为Java类和方法自动生成格式化文档。通过阅读Javadocs,开发者可以快速了解各个API的用途、参数、返回值以及可能抛出的异常等信息,从而提高开发效率并减少错误。 ...

    软件开发工程师(JAVA)笔试题

    - `Float` 是 Java 中的一个包装类,用于处理 `float` 类型的数据。 - **答案解析**:选项 A 和 B 正确;选项 C 错误,应使用 `new Float()` 创建 `Float` 对象;选项 D 正确。 ### 12. 实例方法调用 - 实例方法...

    Java从入门到精通-目录

    ### Java从入门到精通知识点概览 #### 第1章 初识Java ##### 1.1 Java简介 - **1.1.1 什么是Java语言**:Java是一种广泛使用的高级编程语言,由Sun ...这些包装类将基本数据类型封装为对象,提供了丰富的操作和...

Global site tag (gtag.js) - Google Analytics