强类型语言,即Strongly Typed Language,从字面上理解,就是Java语言对类型要求很严格。
Java语言对类型要求有哪些呢?
1、变量必须先声明类型,然后使用
例如:
int i;Object object;i = 12;
2、给变量赋值时,或者方法返回值时,必须类型兼容
2.1、相同类型之间赋值合法
例如,下面的赋值是合法的:
2.2 null可以赋值给任何引用类型
例如,下面的赋值是合法的:
2.3 byte类型的值可以赋值给short、int、long、float、double类型
例如,下面的赋值是合法的:
2.4 short类型的值可以赋值给int、long、float、double类型
例如,下面的赋值是合法的:
2.5 int类型的值可以赋值给long、float、double类型
例如,下面的赋值是合法的:
2.6 long类型的值可以赋值给float、double类型
例如,下面的赋值是合法的:
2.7 float类型的值可以赋值给double类型
例如,下面的赋值是合法的:
2.8 引用类型之间赋值,子类可以赋值给超类
例如,下面的赋值是合法的:
3、强制类型转换(cast)
3.1 强制类型转换的语法
强制类型转换的语法是:
Type1 type1Value = (Type1)type2Value;
3.2 下面的基本类型赋值不合法
下面基本类型之间直接赋值不合法:
(1)doube向float、long、int、short、byte类型赋值;
(2)float向long、int、short、byte类型赋值;
(3)long向int、short、byte类型赋值;
(4)int向short、byte类型赋值;
(5)short向byte类型赋值;
例如,下面的赋值不合法,编译不能通过:
3.3 用整型常量给整型变量赋值时,常量不能超过该整型类型的取值范围
例如,给byte类型赋值0xA0,编译不能通过:
3.4 不能用double型常量给float类型变量赋值
例如,下面的代码编译不能通过:
3.5 基本类型赋值时,如果类型不能兼容,可以使用强制类型转换(但是精度和值可能会受影响)
例如,下面的代码可以编译通过:
4、为了防止引用类型在强制类型转换时抛出CastException异常,可以先使用instanceof进行类型判断
例如,下面的代码可以确保不会抛出CastException异常: