文章目录
- 1. 字面量默认类型问题
- 2. 变量在操作之前可以不给值
- 3. byte类型的提升问题
- 4. 字符转换问题
- 5. 所有的类型都不能赋值给char,除了它本身
- 6. char类型可以提升为int,float,double类型,但赋值给byte,int,short都需强转
- 7. byte,short,char在底层都是以int类型32位存储的
- 8. char,byte,short无论做任何操作,都会提升为int类型
- 9. int可以提升为long类型,整型可以提升为浮点
- 10. long提升为浮点数科学计数法舍入误差问题
- 11. 强制类型转换格式:目标数据=(目标数据类型)(要转的数据)
- 12. 浮点数强制类型转换为浮点型会舍弃小数位
- 13. 常量编译期优化问题
1. 字面量默认类型问题
- 默认的整型字面量为int,如果超出这个范围,编译会报异常;需要在字面量之后加上L/l,来表示该字面量为long类型,让编译器把它当做long类型来存储,而不是int。
- java1.7支持数据可以分割表示
- 浮点数的默认字面量类型为double,所以float类型的变量要想接住小数需要在数值后标明f/F。
- 虽然double是默认的小数字面量类型,但是它也有自己的标记
2. 变量在操作之前可以不给值
操作之前必须给值,不操作之前可以只声明:
3. byte类型的提升问题
- byte类型可以提升为int类型
- byte可以自动提升为short类型
4. 字符转换问题
- 字符赋值byte,short会出现问题。因为它们所表示的范围是有正负的-128-+127,-32768-+32767。而char占两个字节,表示范围是0-65535,所以short只能表示一半的字符,而byte只能表示半个字节的字符,也就是ASCII码表。如果赋值的字符一旦超出它们所能承受的范围就报错。
达字超出了范围
5. 所有的类型都不能赋值给char,除了它本身
- 因为这些类型本身就有负数,而char类型只能接收非负数,所以为了防止这类情况发生,不能让其转换
6. char类型可以提升为int,float,double类型,但赋值给byte,int,short都需强转
7. byte,short,char在底层都是以int类型32位存储的
- 标题连接中做了证明,给byte,short,char分配的空间确实是32位,只不过编译时对其表示范围加以限制。所以默认字面量的类型为int的值赋值给这三个类型,不会报错。
8. char,byte,short无论做任何操作,都会提升为int类型
- “+ - * / >> << ”第一步都会提升为int类型,所以不单单只是+法而已
- 例题
9. int可以提升为long类型,整型可以提升为浮点
10. long提升为浮点数科学计数法舍入误差问题
11. 强制类型转换格式:目标数据=(目标数据类型)(要转的数据)
12. 浮点数强制类型转换为浮点型会舍弃小数位
13. 常量编译期优化问题
- 注意:其实这几个问题只要记住一点,基本类型中的整型和char在底层都是以32位存储的,而只有在编译期,编译器对byte,short,int,char32位的数据加了一个限制,加上对应的范围。所以byte,short,char无论做什么操作都会变成int。而字符常量看似是个字符,其实也是一个32位的数字,只不过对其加以限制只能是16位,且输出的时候要以字符形式输出。如果是低精度到高精度,默认变量提升。但如果高精度到低精度必须加上强制类型转换