byte
: 占用1个字节(8位),范围:-128
到127
。
short
: 占用2个字节(16位),范围:-32768(-2^15)
到32767(2^15 - 1)
。
int
: 占用4个字节(32位),范围:-2,147,483,648(-2^31)
到2,147,483,647(2^31-1)
。
long
: 占用8个字节(64位),范围:-9,223,372,036,854,775,808( -2^63 )
到9,223,372,036,854,775,807( 2^63-1)
。
float
: 占用4个字节(32位),提供单精度浮点数支持。
double
: 占用8个字节(64位),提供双精度浮点数支持。
char
: 占用2个字节(16位),用于存储单个Unicode字符,范围:0 ~ 65535(2^16 - 1)。
boolean
: 虽然Java规范没有明确规定其确切的字节占用,但在实践中通常占用1个字节(8位),且只能取值true
或false
。
Byte
对应byte
Short
对应short
Integer
对应int
Long
对应long
Float
对应float
Double
对应double
Character
对应char
Boolean
对应boolean
Integer.MAX_VALUE
和Integer.MIN_VALUE
分别表示int
类型的最大和最小值。
Integer.parseInt()
和Integer.toString()
用于字符串与整数之间的转换,Double.valueOf()
用于将字符串解析为浮点数,Character.toUpperCase()
用于将字符转换为大写等。此外,还有用于比较、计算、位操作、进制转换等相关的方法。
List<Integer>
、Set<Character>
)中,这是基本数据类型无法做到的。
ArrayList
、HashSet
等集合时,就需要使用包装类。
null
,而包装类可以,这对于表示缺失或未知的值非常有用。
AtomicInteger
、AtomicLong
等原子包装类提供了线程安全的递增、递减等操作。
int
、double
这样的类型被称为基本数据类型。它们非常简单,只存储一个数值,不包含任何其他信息。因此,它们占用的内存非常少,int
就是4个字节。
Integer
、Double
这样的类被称为包装类。它们是基本数据类型的“升级版”,因为它们是对象。这意味着每个包装类对象都不仅仅是一个数值,它还包含了一些额外的“行李”:
简单来说,基本数据类型就像是轻量级的数值容器,而包装类则是更重的,带有额外信息和功能的对象。在不需要对象特性(如继承、多态等)的情况下,使用基本数据类型可以节省内存并提高效率。但是,当需要使用对象的特性,如将数值存储在对象集合中时,就需要使用包装类。因此,选择使用哪种类型取决于你的具体需求。
BigDecimal
而非float
或double
;如果只需要表示四位十进制数,int
或short
可能就足够了。
-128
到127
之间,使用byte
而非int
可以大大减少内存消耗。
float
和double
存在精度损失,可能导致金额计算不准确,此时应选择BigDecimal
来确保精确计算。
byte
类型就能满足需求,显著降低存储空间占用。
float
)来提高计算速度,避免不必要的装箱操作带来的性能损耗。
List<Student>
(其中Student
类包含int age
字段)而非List<int>
,可以利用集合框架提供的丰富API进行高效的操作,如Collections.sort()
进行排序,stream().filter()
进行过滤等。虽然age
字段使用了包装类Integer
,牺牲了一定的内存和性能,但换取了代码的简洁性和可维护性。