Java中的八种基本数据类型boolean、char、int、short、long、float、double及注意事项
-
Java中基本数据类型只有八种:boolean、char、int、short、long、float、double;
-
其中六大数值类型可以按照如下顺序排序:
byte < short < int < long < float < double -
基本占位范围情况表
-
boolean(布尔型)
1bit(位) 1Byte(字节) 取值范围:true、false
- 理论上boolean类型只有true和false两种逻辑值用一个位就ok了,理由是虽然编译后1和0只需占用1位空间,但计算机处理数据的最小单位是1个字节,1个字节等于8位,实际存储的空间是:用1个字节的最低位存储,其他7位用0填补,如果值是true的话则存储的二进制为:0000 0001,如果是false的话则存储的二进制为:0000 0000。
- Java与C、C++不同。C、C++中用0代表假,非0代表真。而java只有true和false两种取值。
-
char(字符型)
16bit(位) 2Byte(字节) 取值范围:0 ~216-1
- char是基本类型,但String不是。String是Java中的一个类,属于引用类型;char中只能放一个字符。char a=‘a’; //任意单个字符,加单引号。char a=‘中’;//任意单个中文字,加单引号char a=111;//整数。0~65535。十进制、八进制、十六进制均可。输出字符编码表中对应的字符。
-
byte(字节型)
8bit(位) 1Byte(字节) 取值范围:-27~27-1
- byte:进行一些IO数据传输操作时常用到。
注:byte字节型有8位为什么范围却只有-27~27-1? 因为byte是有正负的所以要有一位作为符号位,首位二进制作为符号位1表示负数,0表示正数
这有一些奇怪的现象,看博的同行们可以评论一下这些现象产生的原因,谢谢!
1. byte a=2;
byte b=a+1;//这会报错
2.
char x=65;
byte y=x;//报错,同胞们你们在数轴上画出他们两的取值范围就懂了
short b=x;//报错
int a=x;//不报错
3.
byte b1 = 10;
byte b2 = 20;
byte b3 = b1 + b2;
System.out.println(b3);
答案:第三行编译报错,byte类型在参与运算时会被隐式地提升为int,
两个int相加结果还是int。而int类型的结果75是无法直接赋值给byte类型的变量。
-
short(短整型)
16bit(位) 2Byte(字节) 取值范围:-215~215-1
-
short 数据类型是 16 位、有符号的以二进制补码表示的整数
-
Short 数据类型也可以像 byte 那样节省空间。一个short变量是int型变量所占空间的二分之一;
-
默认值是 0;
-
例子:short s = 1000,short r = -20000。
-
-
int(整型)
32bit(位) 4Byte(字节) 取值范围:-231~231-1
-
int 数据类型是32位、有符号的以二进制补码表示的整数;
-
一般地整型变量默认为 int 类型;
-
默认值是 0 ;
-
例子:int a = 100000, int b = -200000。
-
-
long(长整型)
64bit(位) 8Byte(字节) 取值范围:-263~263-1
-
long 数据类型是 64 位、有符号的以二进制补码表示的整数;
-
这种类型主要使用在需要比较大整数的系统上;
-
默认值是 0L;
-
例子: long a = 100000L,Long b = -200000L。
-
"L"理论上不分大小写,但是若写成"l"容易与数字"1"混淆,不容易分辩。所以最好大写。
1. 问:System.out.println(5 * 1000 * 1000 * 1000 / 1000);的运行 结果和你自己运算的结果为什么有冲突。 2. long l1 = 10; long l2 = 10l; 而实际上l1和l2的值大小也是相等的。只不过,l1实际上是在用一个 32位int字面量赋值。32位小于64位,所以可以兼容。而l2是真正用了一个 64位长整型字面量值给一个64位长整型变量赋值,类型完全相同。
-
-
float (单精度浮点类型)
32bit(位) 4Byte(字节)
取值范围:大约:上限:3.40E38 下限:1.4E-45(表示精确度)- float 数据类型是单精度、32位、符合IEEE 754标准的浮点数;
- 超出部分可能会精度丢失。
字面量后面加“f”或“F”代表float类型。 - float 在储存大型浮点数组的时候可节省内存空间;
- 默认值是 0.0f;
- 浮点数不能用来表示精确的值,如货币;
- 例子:float f1 = 234.5f。
-
double(双精度浮点类型)
64bit(位) 8Byte(字节)
取值范围:大约:上限:1.80E308 下限:4.9E-324(表示精确度)- double 数据类型是双精度、64 位、符合 IEEE 754 标准的浮点数;
- 浮点数的默认类型为 double 类型;
- double类型同样不能表示精确的值,如货币;
- 默认值是 0.0d;