Java开发,参数类型如何选?int, Integer, AtomicInteger?

本文详细介绍了Java中的int、Integer和AtomicInteger类型,讨论了它们在性能、封装、缓存池和并发编程中的应用,重点强调了AtomicInteger的原子性和CAS操作在避免锁竞争中的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

如题所述,笔者在前段时间面试某家金融科技公司时被问到了上述问题,脑海中的记忆一时也不是太清楚,特地前来进行整理并分享。


概述

int是基础的变量类型;Integer是包装类型;AtomicInteger是来自JUC的一个在并发编程场景下重要的包,对于Java开发人员来说,确实需要对其都有充分的认识与了解。

int

int 是 Java 的基本数据类型,它是一个 32 位的有符号整数,取值范围为 -2^31 到
2^31-1。
int 类型在性能上比 Integer 和 AtomicInteger 更优越,因为它是一个简单的原生类型,没有额外的封装和开销。

Integer

首先,Integer属于包装类。包装类型的出现就是我们可以在对象里面定义一些方法,因为封装的数据类型就是一个对象,可以拥有属性和方法,有了这些属性和方法我们就可以用它们来处理数据,比如Integer对象里的parseInt(String s),可以把字符串转换成int类型等。

Integer x = 2;     // 装箱 调用了 Integer.valueOf(2)
int y = x;         // 拆箱 调用了 X.intValue()

Integer 是 Java 的一个包装类,它对应的基本类型是 int。**Integer 类型的所有实例都共享一个静态的缓存池,用于存储 int 类型的值。**当需要使用一个整数时,Java 会优先从缓存池中获取一个已有的 Integer 实例,而不会创建一个新的实例。这样可以提高性能,尤其是在处理大量整数时。

Integer 和 int的区别?

  • Integer是int的包装类,int则是java的一种基本的数据类型;

  • Integer变量必须实例化之后才能使用,而int变量不需要实例化;

  • Integer实际是对象的引用,当new一个Integer时,实际上生成一个指针指向对象,而int则直接存储数值

  • Integer的默认值是null,而int的默认值是0。

  • 包装类Integer和基本数据类型比较的时候,java会自动拆箱为int,然后进行比较

缓存池

基本类型对应的缓冲池如下

Java 基本类型的包装类的大部分都实现了常量池技术,即Byte,Short,Integer,Long,Character,Boolean;

  • 前4 种包装类默认创建了数值[-128,127] 的相应类型的缓存数据
  • Character创建了数值在[0,127]范围的缓存数据
  • Boolean 直接返回True 或 False。如果超出对应范围仍然会去创建新的对象。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值