本文 首发于 🍀 永浩转载 请注明 来源

Java基本类型占用字节数(或 bit数)

Java 的8大基本类型

既然说的是 Java 8大基本类型的占用字节数,我们先来聊聊 Java 的8大基本类型

整型
  • int :整数类型
  • short :短整型
  • long :长整型
  • byte :字节类型
浮点型
  • float :浮点类型(单精度)
  • double :浮点类型(双精度)
逻辑型
  • boolean :布尔型
字符型
  • char :字符型

基本数据类型自动转换 byte -> short char -> int -> long float -> double int -> float long -> double ** 重要的一点:小可转大,大转小会失去精度!!!** 低数据类型可以直接赋值给高数据类型,反之,高数据类型转换为低数据类型必须强转,即提前制定数据类型,例 int a = (int) 0.0F

Java 8大基本类型所占字节数(或 bit 数)

类型存储需求bit 数取值范围备注
int4字节4*8-2147483648~2147483647即 (-2)的31次方 ~ (2的31次方) - 1
short2字节2*8-32768~32767即 (-2)的15次方 ~ (2的15次方) - 1
long8字节8*8即 (-2)的63次方 ~ (2的63次方) - 1
byte1字节1*8-128~127即 (-2)的7次方 ~ (2的7次方) - 1
float4字节4*8float 类型的数值有一个后缀 F(例如:3.14F)
double8字节8*8没有后缀 F 的浮点数值(例如:3.14)默认为 double
boolean1字节1*8true、false
char2字节2*8Java中,只要是字符,不管是数字还是英文还是汉字,都占两个字节。

至于为什么 Java 中 char 无论中英文数字都占用2字节,是因为 Java 中使用 Unicode 字符,所有字符均以2个字节存储。 而如果需要识别字符是否为中文,可以使用正则匹配式:

String _regex = "[\\u4e00-\\u9fa5]";

补充

Java有一个能够表示任意精度的算书包,通常称为“大数值”(big number)。虽然被称为大数值,但它并不是一种Java类型,而是一个Java对象。

如果基本的整数和浮点数精度不能够满足需求,那么可以使用java.math包中的两个很有用的类:BigInteger、BigDecimal(Android SDK中也包含了java.math包以及这两个类)这两个类可以处理包含任意长度数字序列的数值。BigInteger类实现了任意精度的整数运算,BigDecimal实现了任意精度的浮点数运算。具体的用法可以参见Java API。