00x00
在强类型语言中 (C, C++, Java), 常量都有自己对应的数据类型 例如 C/C++ 、Java中 整数 12
的数据类型是 int
, 浮点数 1.0
在 Java 中的数据类型是 double
,在 C/C++ 中是 float
。
00x01
在 C/C++ 中,以下代码编辑器器(clion)会显示警告,但编译过程不会显示任何警告信息。1
2int a = 1;
short b = a;
同样代码在 Java 中则直接显示错误信息,而且无法通过编译。
00x02
同样地,在 C/C++ 中,下面这一段明显会溢出的代码,也能够顺利通过编译。1
2
3int a = 1000;
char b = 0;
b = b + a;
在 Java 中,不能通过编译。
00x03
前面提到过,整数默认类型是 int 。那么我们可以预料到,以下代码在 Java 中会报错
1 | char a = 0; |
同样,我们也可以预料到,在 C/C++ 中,只是编辑器显示一个警告而已。
00x04
我们换一种写法。1
2byte a = 0;
a += 1000
结果
结果明显是错的,但是编辑器和编译器都没有任何提示!
看看 C++
结果和 Java 是一样的。。
00x05
可以推断出的结论是 在 C/C++ 和 Java 的编译器中1
a += b;
并不是等价于1
a = a + b;
而是等价于1
a = ([type_of_a]) (a + b)