标签:
Java 语言是静态类型的(statical typed),也就是说所有变量和表达式的类型再编译时就已经完全确定。由于是静态类型,导致 Java 语言也是强类型(Strong typed)的。强类型意味着每个变量都具有一种类型,每个表达式具有一种类型,并且每种类型都是严格定义的,类型限制了变量可以接收哪些值,表达式最终产生什么值。同时限制了这些值可以进行的操作类型以及操作的具体方式。所有的赋值操作,无论是显式的还是在方法调用中通过参数传递,都要进行类型兼容性检查。
在 Java 源代码中,每个变量都必须声明一种类型(type)。有两种类型:基本类型(primitive type) 和引用类型(reference type)。引用类型引用对象(reference to object),而基本类型直接包含值(directly contain value)。基本类型(primitive types)包括 boolean 类型以及数值类型(numeric types)。数值类型又分为整型(integer types)和浮点型(floating-point type)。整型有5种:byte short int long char(char 本质上是一种特殊的 int)。浮点类型有 float 和 double。关系整理一下如下图:
null 是一种特殊的类型 ,但是你不能声明一个变量为 null 类型,null 类型的唯一取值就是 null。null 可以负值给任意的引用类型或者转化成任意的引用类型。在实践中,一般把 null 当做字面值(literal),这个字面值可是是任意的引用类型。
其它引用类型将在之后介绍,此处不不再赘述。
基本类型是单个值,而不是复杂的对象,基本类型不是面向对象的,主要出去效率方面的考虑,但是同时也提供基本类型的对象版本,即基本类型的包装器(wrapper)。可以直接使用这些基本类型,也可以使用基本类型构造数组或者其他自定义类型。基本类型具有明确的取值范围和数学行为。
基本类型 | 大小 | 最小值 | 最大值 | 包装类 |
boolean | -- | -- | -- | Boolean |
char | 16 bits | Unicode 0 | Unicode 216-1 | Character |
byte | 8 bits | -128 | +127 | Byte |
short | 16 bits | -2^15 | +2^15-1 | Short |
int | 32 bits | -2^31 | +2^31-1 | Integer |
long | 64 bits | -2^63 | +2^63-1 | Long |
float | 32 bits | IEEE754 | IEEE754 | Float |
double | 64 bits | IEEE754 | IEEE754 | Double |
void | -- | -- | -- | Void |
将一种类型的值赋给另一种类型是很常见的。在 Java 中,boolean 类型与所有其他7种类型都不能进行转换。而其他7种数值类型之间都可以互相转换,但是可能会存在精度损失或者其他一些变化。转换分为自动转换和强制转换。对于自动转换(隐式),无需任何操作,而强制类型转换需要显式转换,即使用转换操作符。
7种基本类型转换总结如下图:
在使用字面值对整数赋值的过程中,可以将 int 赋值给byte short char int,只要不超出范围。这个过程中的类型转换时自动完成的,但是如果你试图将 long 赋给byte,即使没有超出范围,也必须进行强制类型转换。例如 byte b = 10L;是错的,要进行强制转换。
除了赋值以外,表达式计算过程中也可能发生一些类型转换。在表达式中,类型提升规则如下:
标签:
原文地址:http://www.cnblogs.com/Loshine/p/4525649.html