Java中为什么给float类型变量赋值需要加F,而给byte、short赋值的时候却不需要呢?

关键字:被Java赋予特殊含义的字符串叫关键字。
(备注:所有关键字都是小写的)
保留字:现有Java版本尚未使用,但以后版本可能会作为关键字使
用。自己命名标识符时要避免使用这些保留字“goto 、const”。
标识符:凡是自己可以取名字的地方都叫标识符。
比如:类名、变量名、方法名、包名、接口名等等。
标识符命名规则:
在这里插入图片描述
标识符命名规范:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

基本数据类型转换
1)自动类型转换:容量小的类型自动转换为容量大的数据类型。
数据类型按容量大小排序为:
在这里插入图片描述
特别的:当byte、short、char三者在计算时首先都转换为int类型(包含例如byte和byte之间进行计算)。
2)强制类型转换:将容量大的数据类型转换为容量小的数据类型。
(备注:可能造成精度降低或溢出)

Java中为什么给float类型变量赋值需要加F,而给byte、short赋值的时候却不需要呢?
JVM规范中所说,并没有说float,int,byte等占多少个字节,而是真正的有效位是多少。比如byte的有效位是1个字节,也就是-128到127。使用Java编程的时候,就只能用byte表示-128到127之间的数,而真正JVM实现,一般byte还是占用和int一样大小:4个字节。
也就说在JVM看来,short,byte,int都是同一个东西。
这也就解释了为什么byte,short使用int字面量赋值的时候会不用强制转型。
在这里插入图片描述
因为编译器在编译的只需要根据字面值3,字面值2来确定是否超过有效值即可,并不用做深入的检查,因为他们在JVM存在的类型也是一样的。
在这里插入图片描述
同时在通过JVM在操作byte,short,int都是用的相同的指令:iconst,bipush等也能证明。

然而double和float在JVM中存储是不一样的。
在这里插入图片描述
因此在使用double给float赋值的时候,会报错的。

发布了25 篇原创文章 · 获赞 0 · 访问量 639

猜你喜欢

转载自blog.csdn.net/CGB1804Great/article/details/103545545