- 数据类型
- 基本数据类型 8个
- 4整型 byte,short,int, long
(内存空间大小不一致,表示范围不一样)
byte: 字节型------>8个bit 1byte= 0 0000000 256种组合
用第一个bit记录符号,0整数,1负数,表示范围为 − 2 7 -2^7 −27~ 2 7 − 1 2^7-1 27−1 即 -128~127
以上的其他整数类型 依次乘2
short 2字节 = 16bit 65526种 -32768~32767
int 4个字节 = 32bit
long 8个字节 = 65bit - 2浮点 float,double
float 32bit 4字节
符号 整数部分(9) 小数部分
0 000000000 0000000000000000000000
double 64bit 8字节
符号位(1)整数部分(19)小数部分 - 1字符型 char
char 16bit 2字节 中文使用Unicode编码
因为字符中数字和整数的数字冲突,为了以示区分,字符型前后用单引号括起来
为什么英文和数字是一个字节,中文是两个字节?
计算机存储时使用ASCII码存储信息,a-----00000000-----97
因为英文和数字的种类较少,可以使用8个bit完全表示,
而中文种类太多,所以至少需要两个字符来表示。 - 1布尔型 boolean 1bit true false
在Java种布尔类型和1,0 不能互相转换
- 4整型 byte,short,int, long
- 基本数据类型 8个
==========================================================================================
-
float num = 3.4;
-
编译会显示错误:
Type mismatch: cannot convert from double to float
因为1,3.4都是常量值,存储在常量缓冲区中,存储形式是以二进制形式存储的,
1 ------->32bit (int)
3.4 ----->64bit (为了保证精确程度更高,相当于double)
所以定义float变量时应该定义为 float num=3.4F;(F大小写均可,一般大写)
但是 byte c = 1; 可以编译,为什么?
-
1 -----> 32bit
00000000 00000000 00000000 00000001
a -----> 8bit
= 赋值操作时进行了自动转化,将32bit的1 转化成8bit的1,前提是必须在byte的取值范围内,如果超出则不可以自动转化。
long b = 214783648L;
-
int类型的取值范围为(-2147483648~-2147483647)
如果创建的常量值超过以上范围,程序编译检测的时候会认为数字太大,如果需要定义一个长整型数字,必须在后面加上L告知
字符 | 字符串 |
---|---|
char | String |
基本 | 引用 |
‘a’ | “a” “abc” “” null |
==========================================================================================
以下后续补充
* 引用数据类型
+ 数组[]
+ 类class(抽象类 abstract class)
+ 接口interface
+ 枚举enum
+ 注解@interface