数据类型
基本数据类型 8个
整型 4个
byte 字节型---->1个字节8个bit 敏感单元位
1byte==8bit 00000000 256种组合
用第一个bit位置来记录符号 0整数 1负数
数值的范围 -2的7次方 ~ 2的7次方-1(即-128~127)
以上的其他整数类型 一次乘以2
shot 2字节==16bit 65526种(-32768~32767)
int 4字节==32bit (-2147483648~2147483647)
long 8字节==64bit
浮点型 2个 float (4字节==32个bit)单精度,double (8字节64个bit)双精度
字符型 1个 char 键盘上能输出的 2字节==16bit Unicode编码(0-65535个)
布尔型 1个 boolean 1bit true1 false0
引用数据类型
数组[],
类class(抽象类abstractclass),
接口interface,
枚举enum,
注解@interface
实例1:
public class Test3{ public static void main(String[] args){ byte a = 1; short b = 2; int c = 3; long d = 2; float e =3.4; double f = 5.2; char g = 'y'; boolean h = true; }
E:JavaTestday3>javac Test3.java
Test3.java:7: 错误: 不兼容的类型: 从double转换到float可能会有损失
float e =3.4;
^
1 个错误
实例2:
public class Test3{ public static void main(String[] args){ byte a = 1; short b = 2; int c = 3; long d = 2147483648; float e =3.4F; double f = 5.2; char g = 'y'; boolean h = true; } }
E:JavaTestday3>javac Test3.java
Test3.java:6: 错误: 过大的整数: 2147483648
long d = 2147483648;
^
1 个错误
编译报错,思考问题:
1 为什么float放3.4会报错?
整数常量是用32bit位存储的,相当于int
小数常量是用的64bit位,相当于双精度的double
3.4这个常量的值默认的内存空间是64bit,但是float存的是32bit位的大小,因此存不下
所以需要人为降低精度,所以必须加F否则编译报错
2 为什么byte能放的下1不报错(byte==8bit,而整数常量1占32bit)?
常量1==32bit位
它在计算机中存储的形式是00000000 00000000 00000000 00000001
=号在赋值的时候检测到前面有一串没用的0,于是自动转换将00000000 00000000 00000000去掉了(但是前面必须都是0)
这个时候就变成了00000001-->8bit,因此用byte可以存的下
3 为什么long放2147483648报过大的整数?
-2147483648~2147483647是int类型的取值范围,long要比int大的多
如果创建的常量超过以上范围,程序编译检测的时候会认为数字太大认为你是不是笔误写错了,提醒你注意
如果我们真的需要这么大的数字必须在后面加L人为告知( L不是必须加的)
字符和字符串的区别?
字符 字符串
char String
基本数据类型 引用数据类型
'a' "a" "abc" "" null
只能且必须是一个字符 可以是一个多个 或者空 ornull
单引号 双引号