Java的Integer和int有什么区别?

简介: Java的Integer和int有什么区别?

Integer是int类型对应的包装类, Integer里面具有一个int类型的value值来存放对应的int数据, 并提供了许多基本操作, 例如将int类型转化为字符串等方法.

在java5中, java引入了自动装拆箱功能? 什么是自动装拆箱?详细可以查看如下

Integer类超详解-CSDN博客

java可以根据情景, 自动将int类型的数据转化为一个Integer对象, 或者是将一个Integer对象转化为一个int类型的数据.

Integer类新建对象的范围, 或者说是他的缓存范围, 在java5版本之前, Integer的缓存是默认新建一个Integer对象的, 但是后面根据实践发现, 其实大部分的数据操作都是集中在一小部分的范围之内的,且数值较小的范围, 所以java5版本之后, Integer类中新增了valueOf() 方法, 让在-128 ~ 127 之间的数据得到缓存, 也就是被放入我们常说的常量池, (如果在这个范围内已经存在对应数据, 那么就直接在IntegerCache里面取对应数据,如果不在这范围之中, 也就是在IntegerCache中找不到对应数据那么就会新建对象). 在这个返回之外创建Integer类型数据才会新建一个对象.这样做给java性能带来了明显的提升.

详细讲讲java自动装箱,拆箱

简单来说, 自动装拆箱其实就是让基本数据类型具有类的对象的性质. 为什么要将基本数据类型具有这种面向对象的性质? 基本数据类型使用起来非常的方便, 但是他缺少一些常规的方法, 来操作这些基本类型数据. 可以将这些基本数据类型包含在一个类中, 然后在这个类中提供相应的方法, 我们就可以调用这些类中的方法, 更加方便的操作基本类型的数据.

如何自动装拆箱? Integer类超详解-CSDN博客

如何看待这种自动装拆箱机制? 这其实就是后来引进的一个便捷语法, 可以简单理解为编译器和java平台为我们自动做了一些转换, 将代码自动编译成java虚拟机可识别的字节码:

Integer(1) -> Integer.valueOf(1)..前后生成的字节码是一样的

这种装拆箱同样也不只有Integer才有,同样存在于其他的一些包装类, 例如Boolean, Short等.

包装类有什么缺点?

最直观的是, int类型的数据是基本数据类, 每一个int类型的数据占据4个字节, 但是在java中一个对象就不只是四个字节了, 每个Integer里面有一个int类型的字段来存放对应的int类型的数据, 里面还有对应的MAX_VALUE, 和MIN_VALUE的数据.在数据量比较少的时候, 他们的差别还没那么大, 但是当数据量到达数以万计的时候就不是一个级别的了, 创建10w个基本数据类型,和10w个Integer对象不是一个开销程度. 如果在操作数据的时候, 对性能敏感的时候, 应该尽量避免使用创建过多的对象(当然在这个内存不怎么值钱的时代, 还是以开发效率优先的)

Integer类型具有不可变性

去查看Integer类的源码的时候, 你会发现,其int关键字段被设置为private final,他们成了不可变的类型,这样设计是可以理解的, 这样保证的基本信息安全和并发编程中的线程安全. 这种不可变性同时也在一定程度上保证了可移植性, 类比如c和c++,他们的整数数位在32位平台和64位平台存在非常大的不同, 在某些情况可能会因为平台问题发生严重的数值溢出导致服务器崩溃. java缺没有这方面的顾虑, 在64和32并没有什么太大的差异, 这就是"一次书写, 到处执行".

对象的内存结构

如何计算或者获取某个java对象的大小?

目录
相关文章
|
1天前
|
Java 大数据 API
Java 流(Stream)、文件(File)和IO的区别
Java中的流(Stream)、文件(File)和输入/输出(I/O)是处理数据的关键概念。`File`类用于基本文件操作,如创建、删除和检查文件;流则提供了数据读写的抽象机制,适用于文件、内存和网络等多种数据源;I/O涵盖更广泛的输入输出操作,包括文件I/O、网络通信等,并支持异常处理和缓冲等功能。实际开发中,这三者常结合使用,以实现高效的数据处理。例如,`File`用于管理文件路径,`Stream`用于读写数据,I/O则处理复杂的输入输出需求。
|
5天前
|
机器学习/深度学习 人工智能 安全
python和Java的区别以及特性
Python:适合快速开发、易于维护、学习成本低、灵活高效。如果你需要快速上手,写脚本、数据处理、做点机器学习,Python就是你的首选。 Java:适合大型项目、企业级应用,性能要求较高的场景。它类型安全、跨平台能力强,而且有丰富的生态,适合更复杂和规模化的开发。
15 3
|
23天前
|
XML JSON 前端开发
Java @RequestParam和@RequestBody的区别是什么?
【8月更文挑战第28天】Java @RequestParam和@RequestBody的区别是什么?
28 5
|
30天前
|
Java
Java 中 notify() 和 notifyAll() 的区别
【8月更文挑战第22天】
43 4
|
30天前
|
Java
|
29天前
|
存储 安全 Java
Java 中 ArrayList 和 HashSet 的区别
【8月更文挑战第23天】
34 2
|
29天前
|
Java 调度
|
29天前
|
存储 安全 Java
Java 中数组和 ArrayList 的区别
【8月更文挑战第23天】
28 1
|
28天前
|
Java 程序员
详解Java中的抽象类与接口的区别
【8月更文挑战第24天】
22 0