八种基本类型
Java语言提供了八种基本类型。我们习惯上将其分为四大类型,其中四个整数类型,两个浮点类型,一个逻辑类型,还有一个字符类型。
类型 | 基本类型 | 字节 | 位 | 最小值 | 最大值 | 默认值 |
---|---|---|---|---|---|---|
整数类型 | byte | 1 | 8 | -128(-2^7) | 127(2^7-1) | 0 |
整数类型 | short | 2 | 16 | -32768(-2^15) | 32767(2^15 - 1) | 0 |
整数类型 | int | 4 | 32 | -2,147,483,648(-2^31) | 2,147,483,647(2^31 - 1) | 0 |
整数类型 | long | 8 | 64 | -9,223,372,036,854,775,808(-2^63) | 9,223,372,036,854,775,807(2^63 -1) | 0L |
浮点类型 | float | 4 | 32 | - | - | 0.0f |
浮点类型 | double | 8 | 64 | - | - | 0.0d |
逻辑类型 | boolean | - | - | - | - | false |
字符类型 | char | 2 | 16 | \u0000 | \uffff | ‘\u0000’ |
注:数值后面的字母本身不区分大小,但 float 的 “l” 容易与数字 “1” 混淆,不容易分辩,因而改写为大写字母 “L”。
byte
byte 数据类型是8位、有符号的,以二进制补码表示的整数
最小值是 -128(-2^7)
最大值是 127(2^7-1)
默认值是 0
byte 类型用在大型数组中节约空间,主要代替整数,因为 byte 变量占用的空间只有 int 类型的四分之一
例子:
byte a = 100;
byte b = -50;
short
short 数据类型是 16 位、有符号的以二进制补码表示的整数
最小值是 -32768(-2^15)
最大值是 32767(2^15 - 1)
Short 数据类型也可以像 byte 那样节省空间。一个short变量是int型变量所占空间的二分之一
默认值是 0
例子:
short s = 1000;
short r = -20000;
int
int 数据类型是32位、有符号的以二进制补码表示的整数
最小值是 -2,147,483,648(-2^31)
最大值是 2,147,483,647(2^31 - 1)
一般地整型变量默认为 int 类型
默认值是 0
例子:
int a = 100000;
int b = -200000;
int c = 0x78ab;
int d = 0b011;
long
long 数据类型是 64 位、有符号的以二进制补码表示的整数
最小值是 -9,223,372,036,854,775,808(-2^63)
最大值是 9,223,372,036,854,775,807(2^63 -1)
这种类型主要使用在需要比较大整数的系统上
默认值是 0L
例子:
long a = 100000L;
long b = -200000L;
float
float 数据类型是单精度、32位、符合IEEE 754标准的浮点数
float 在储存大型浮点数组的时候可节省内存空间
默认值是 0.0f
浮点数不能用来表示精确的值,如货币
例子:
float f1 = 234.5f;
float f2 = 1234.5678;
float f3 = 1e-12F;
double
double 数据类型是双精度、64 位、符合 IEEE 754 标准的浮点数
浮点数的默认类型为 double 类型
double类型同样不能表示精确的值,如货币
默认值是 0.0d
例子:
double d1 = 12.345;
double d2 = 12.34D;
double d3 = 1e12;
boolean
boolean数据类型表示一位的信息
只有两个取值:true 和 false
这种类型只作为一种标志来记录 true/false 情况
默认值是 false
例子:
boolean off = true;
char
char 类型是一个单一的 16 位 Unicode 字符
最小值是 \u0000(十进制等效值为 0)
最大值是 \uffff(即为 65535)
char 数据类型可以储存任何字符
例子:
char c1 = 'A';
char c2 = '家';
char c3 = 0;
char c4 = '\u0000';
类型转换运算
当把一种基本数据类型变量的值赋给另一种基本数据类型变量时会涉及数据转换(不包括逻辑类型)
类型按精度从低到高排列:
byte short char int long float double
当级别低的变量的值赋给级别高的变量时,系统会自动完成数据类型的转换:
int i = 10;
float f = i;
如果输出 f 的值,结果将会是10.0
当级别高的变量的值赋给级别低的变量时,必须使用类型转换运算:
int i = (int)12.3;
int x = (int)1234L;
long l = (long)12.34F;
如果输出 i、x 和 l 的值,结果将会是12、1234 和 12
由结果可知,在转换后小数点后的数据未进行保留。所以在进行转换时运算结果的精度可能会低于原数据的精度
当 int 型常量赋值给一个 byte、short 和 char 变量时,如果超出其取值范围,那么在赋值时需进行类型转换运算,并且运算结果也将导致精度的丢失。
byte b = (byte) 128;
byte b2 = (byte) (-129);
如果输出 b 和 b2 的值,结果将会是 -128 和 127
注:该文章主要参照 《Java 2实用教程(第6版)》以及 菜鸟教程: Java 基本数据类型