变量问题

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位,且输出的时候要以字符形式输出。如果是低精度到高精度,默认变量提升。但如果高精度到低精度必须加上强制类型转换
发布了84 篇原创文章 · 获赞 90 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/weixin_42512488/article/details/99692667