【Java之轨迹】序章:数据类型易错点总结(当C语言遇上Java)

—— 目录 ——

    • ◉ 结晶回路准备
      • ① 各变量的取值范围
      • ② 数据类型大小排序
    • ◉ Java数据类型(与C作比较)
      • (一) char类型占2个字节,所以一个汉字是合法的字符
      • (二) 不允许空字符,编译不通过
      • (三) 整型字面值默认为int,超过范围编译不通过
      • (四) 浮点型字面值默认为double,,超过范围编译不通过
      • (五) 大容量类型不能转化成小容量的,必须强制转化
      • (六) 布尔类型注意点
      • (七) 混合运算注意点


◉ 结晶回路准备

① 各变量的取值范围

类型 取值范围
byte -128 ~ 127
short -128 ~ 127
int -2147483648 ~ 2147483647
char 0 ~ 65535

② 数据类型大小排序

byte < short == char < int < long < float < double

◉ Java数据类型(与C作比较)

(一) char类型占2个字节,所以一个汉字是合法的字符

— [ C语言 ] char类型只占1个字节,无法表示一个汉字


(二) 不允许空字符,编译不通过

【Java之轨迹】序章:数据类型易错点总结(当C语言遇上Java)_第1张图片
— [ C语言 ] 在这里与Java一样,不支持空字符


(三) 整型字面值默认为int,超过范围编译不通过

【Java之轨迹】序章:数据类型易错点总结(当C语言遇上Java)_第2张图片

虽然该数并没有超过long的范围,但却超过了int的,所以会报错编译不通过!!解决办法是在数字后边加上l或L。

— [ C语言 ] 不会报错,直接变成了-2147483648【注意是以补码形式存放的】


(四) 浮点型字面值默认为double,,超过范围编译不通过


(五) 大容量类型不能转化成小容量的,必须强制转化

【Java之轨迹】序章:数据类型易错点总结(当C语言遇上Java)_第3张图片
Tips:
第一行long a = 10;中整形字面量10默认为int,赋值给long发生自动转化。
最后一行float f = 3.1; 中浮点型字面量3.1默认为double,赋值给float时为大容量赋值给小容量,编译不通过

— [ C语言 ] 不会报错,直接截取低位,存在数据溢出问题

— 但有例外:byte,short,char都可以直接用整型字面值赋值(前提是范围不超出),而不用强制转换。如:
【Java之轨迹】序章:数据类型易错点总结(当C语言遇上Java)_第4张图片

前3个右边字面值为整型默认是int,而左边确实比int小的类型,理论上要强制转化不然会编译出错,但却例外地通过了。

— 非常注意:该例外仅限于字面值,换成变量就不行了,如:
【Java之轨迹】序章:数据类型易错点总结(当C语言遇上Java)_第5张图片
原因时编译器检测到变量a为int类型,不能转化为byte类型,需要用到强制转化。


(六) 布尔类型注意点

在C语言中,0表示假,非0表示真,但在Java中使用布尔类型时,不能用0和非0对其赋值,理由是0和非0是字面值默认为int,不能将int赋值给boolean,只能使用true和false


(七) 混合运算注意点

【Java之轨迹】序章:数据类型易错点总结(当C语言遇上Java)_第6张图片

当byte,short,char混在一起进行运算时,都统一转换成int类型进行运算

以上编译不通过,时因为 a 和 b 都自动转化成int类型了,再赋值给 j 属于大容量赋给小容量,不行,应该强制转化加上(short)。

但是注意:写 short j = 1 + 2; 却是可以编译通过的,原因在于上面的特例,byte, short, char都可以直接用整型字面值赋值(只要不超出范围),注意仅限于字面值,换成变量(如上面情况)就不行了。

— [ C语言 ] 不会报错,正确执行


火苗飞舞的方向,将洞穿一切黑暗(寒冰小澈)

你可能感兴趣的:(笔记,实战经验,【Java之轨迹】系列,java,c语言)