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)