四类八种
类型 | 占用存储空间 | 表数范围 |
---|---|---|
byte | 1字节 | -128 ~ 127 |
short | 2字节 | -2^15 ~ 2^15 - 1 |
int(默认) | 4字节 | -2^31 ~ 2^31 - 1 |
long | 8字节 | -2^63 ~ 2^63 - 1 |
---- | ---- | ---- |
float | 4字节 | -3.403E38 ~ 3.403E38 |
double(默认) | 8字节 | -1.798E308 ~ 1.798E308 |
---- | ---- | ---- |
char | 2字节 | |
---- | ---- | ---- |
boolean | 1字节 or 4字节 ? |
注:一个字节 = 1byte = 8bit(位)。基本数据类型定义时如果不赋予初始值,系统会默认给定一个对应的值。
定义变量
- 整型定义
整型包括byte short int long,java中定义int变量如果直接赋值数字,默认为int型。如果没有初始化值,int类型默认值为0。
byte b = 1;
short s = 1;
int i = 1;
// 定义long,如果数值超过int数值范围,需要在后面加一个L
long l = 1;
// 加上一个L,表示直接定义一个long类型。
long l = 1L;
- 浮点型定义
// 浮点型默认为double,double默认值为0.0
double d = 1.1;
// 如果需要定义float类型,需要加上一个f/F表示定义一个float类型
float f1 = 1.1f;
float f2 = 1.1F;
- 字符型定义
//单引号表示,只能表示一个字符, 涵盖所有书面语字符,包括字母、标点、数字、中文等等。char默认值为空字符。
char c1 = 'a';
char c2 = '9';
char c3 = '中';
// char可以表示转义字符, 使用\来将其后面的字符转变为特殊字符型常量
// 例如换行符
char c4 = '\n';
// 使用Unicode值表示字符型常量, \uxxx,其中xxx代表一个十六进制整数, 每个字符对应一个数值
// 例如 \u1234 表示 ?
char c5 = '\u1234';
- 布尔型定义
//boolean只能是true 或者 false,默认为false
boolean b = false;
类型转换
自动类型转换:当容量(数值范围)小的数据类型与容量大的数据类型做运算时,容量小的会自动转换为容量大的数据类型。
规则:char,byte,short -->>int -->>long -->> float -->> double
PS: 当char,byte,short之间作运算时,包括他们自己之间,结果默认为int类型
int i = 1;
short s = 1;
// 默认转为容量大的int
int i2 = i + s;
int i = 1;
float f = 1.1F;
// 默认转为容量大的float
float f2 = f + i;
float是4个字节,long是8个字节,但是long能够自动转换为float,主要是因为在内存中浮点数和整型数存储方式不一样。整数在内存中是直接以二进制形式存储的,而浮点数是以指数方式存储的。4字节的float和8字节的long,float的数值范围要远大于long,因此long能够自动转换为float。
https://blog.csdn.net/writing_happy/article/details/78880606
long l = 1;
float f3 = l + 2;
char表示的字符代表的是一个数字,所以char类型也可以用来做运算
// a代表的数值是97,A代表的是65(均指ASCII码)
char c = 'a';
int i = c + 1; // i = 98
强制类型转换:容量大转换为容量小的,需要使用强制类型转换符: (),里面放需要转换的类型
强制类型转换存在的问题:精度损失(丢弃高位数据,保留低位数据)
long q = 12345L;
int i = (int) q;
// 精度丢失举例:
// int类型的12345二进制为0000 0000 0000 0000 0011 0000 0011 1001
// 转换为byte(1字节/8位)时,丢弃高位数据,保留低位的0011 1001 -->> 57
int i = 12345;
byte q = (byte) i;