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对象的大小?

目录
相关文章
|
2天前
|
Java C++
Java和C++的一些区别
Java和C++的一些区别
|
3天前
|
Java
Java基础7-一文搞懂抽象类和接口,从基础到面试题,揭秘其本质区别(二)
Java基础7-一文搞懂抽象类和接口,从基础到面试题,揭秘其本质区别(二)
9 0
|
3天前
|
设计模式 Java 内存技术
Java基础7-一文搞懂抽象类和接口,从基础到面试题,揭秘其本质区别(一)
Java基础7-一文搞懂抽象类和接口,从基础到面试题,揭秘其本质区别(一)
12 0
|
3天前
|
Java
guava Splitter 与java 内置的string的split 方法的区别
guava Splitter 与java 内置的string的split 方法的区别
5 0
|
11天前
|
Java 程序员 编译器
蓝易云 - Java:Exception和Error有什么区别?
总的来说,Exception和Error的主要区别在于他们的用途和处理方式。Exception是可以被程序员处理的问题,而Error则是程序无法处理的严重问题。在编写代码时,程序员应该尽力处理可能出现的异常,但是对于错误,除非你知道如何处理,否则最好让程序终止,因为继续运行可能会导致更严重的问题。
9 0
|
12天前
|
安全 Java 测试技术
滚雪球学Java(50):理解Java中String、StringBuilder和StringBuffer的区别与选择
【6月更文挑战第4天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
12 0
滚雪球学Java(50):理解Java中String、StringBuilder和StringBuffer的区别与选择
|
12天前
|
JavaScript 前端开发 Java
Java和JavaScript区别与联系
Java和JavaScript区别与联系
11 0
JAVA Integer进制的转换
----- 进制之间的转换。 十进制转成十六进制:  Integer.toHexString(int id); 十进制转成八进制  Integer.toOctalString(int id); 十进制转成二进制  Integer.
1162 0
|
3天前
|
安全 Java API
Java并发基础-启动和终止线程
Java并发基础-启动和终止线程
13 0
|
3天前
|
Java 调度
Java并发基础-线程简介(状态、常用方法)
Java并发基础-线程简介(状态、常用方法)
8 0

热门文章

最新文章