一.目标
1.常量的使用
2.变量的使用
3.类型转换
二.知识点
1.常量
概述:在代码的运行过程中,值不会发生改变的数据
分类:
a.整数类型:所有的整数
b.小数常量:所有带小数点的 2.0
c.字符常量:带单引号的,单引号中有且只有一个内容
d.字符串常量:带双引号的
e.布尔常量: true false 当做条件判断
f.空常量:null 代表不存在,不能直接使用
2.变量
概述:在代码运行的过程中,值会随着不同的情况而随时发生改变的数据
| 数据类型 | 关键字 | 内存占用 | 取值范围 |
| :----------- | :------------- | :------- | :----------------------------------------------------------- |
| 字节型 | byte | 1个字节 | -128 至 127 定义byte变量时超出范围,废了 |
| 短整型 | short | 2个字节 | -32768 至 32767 |
| 整型 | int(默认) | 4个字节 | -2^31^ 至 2^31^-1 正负21个亿<br>-2147483648——2147483647 |
| 长整型 | long | 8个字节 | -2^63^ 至 2^63^-1 19位数字<br>-9223372036854775808到9223372036854775807 |
| 单精度浮点数 | float | 4个字节 | 1.4013E-45 至 3.4028E+38 |
| 双精度浮点数 | double(默认) | 8个字节 | 4.9E-324 至 1.7977E+308 |
| 字符型 | char | 2个字节 | 0 至 2^16^-1 |
| 布尔类型 | boolean | 1个字节 | true,false(可以做判断条件使用) |
分类:
基本数据类型:4类8种
整型:byte short int long
浮点型:float double
字符型:char
布尔型:boolean
引用数据类型:类 枚举 接口 数组 注解
注意点:
a.整数默认类型为int
b.小数默认类型为double
c.字符串不属于基本数据类型,属于引用数据类型,String是一个类,只不过用的时候定义可以按照基本数据类型的格式定义
3.数据类型转换
1.什么时候发生:
a.当等号左右两边不一致的时候
b.小的数据类型与大的数据类型做运算
2.分类
自动类型转换:
a.将取值范围小的数据类型赋值给取值范围大的数据类型 --> 小自动转大
b.取值范围小的数据类型和取值范围大的数据类型数据做运算 -->小自动转大
强制类型转换:
当取值范围大的数据类型数据赋值给取值范围小的数据类型 -->需要强转 比如 把long赋值给int
3.基本数据类型取值范围大小排序
byte,short,char - > int - > long - > float - >double
强转的注意事项:
1.不要随意写成强转的格式,因为会有`精度损失`,`数据溢出`现象
2.byte,short定义的时候如果等号右边是整数常量,如果不超出byte和short的范围,不需要我们自己强转,jvm自动转型 ; byte,short如果等号右边有变量参与,byte和short自动提升为int,然后结果再次赋值给byte或者short的变量,需要我们自己手动强转
3.char类型数据如果参与运算,会自动提升为int型,如果char类型的字符提升为int型会去ASCII码表(美国标准交换代码)范围内去查询字符对应的int值,如果在ASCII码表范围内没有对应的int值,回去unicode码表(万国码)中找
举例:
//精度损失
int i = (int)2.9;
System.out.println(i);
/*
数据溢出
int型占内存4个字节,4个字节变成二进制是32位
100个亿: 10 0101 0100 0000 1011 1110 0100 0000 0000 -> 34位二进制
100个亿的二进制位比int型的二进制位多出来2位,此时干掉最前面的2位
101 0100 0000 1011 1110 0100 0000 0000
101 0100 0000 1011 1110 0100 0000 0000->1410065408
*/
有可能的面试题:
1.8>>>32位 -> 相当于没有移动还是8
2.8>>>34位 -> 相当于往右移动2位