在java源代码中,每个变量都必须声明一种类型(type)。有两种类型:primitive type和reference type。引用类型引用对象(reference to object),而基本类型直接包含值(directly contain value)。因此,Java数据类型(type)可以分为两大类:基本类型(primitive types)和引用类型(reference types)。primitive types 包括boolean类型以及数值类型(numeric types)。numeric types又分为整型(integer types)和浮点型(floating-point type)。整型有5种:byte short int long char(char本质上是一种特殊的int)。浮点类型有float和double。关系整理一下如下图:
对象是动态创建的类实例或者动态创建的数组。The value of reference types are references to objects,而引用一般是指内存地址。所有的对象(包括数组)支持Object类中定义的方法。String literals are presented by String object.
字符及字符串字面值
Java中字符字面值用单引号括起来,如‘@’‘1’。所有的UTF-16字符集都包含在字符字面值中。不能直接输入的字符,可以使用转义字符,如‘\n’为换行字符。也可以使用八进制或者十六进制表示字符,八进制使用反斜杠加3位数字表示,例如‘\141‘表示字母a。十六进制使用\u加上4为十六进制的数表示,如‘\u0061‘表示字符a。也就是说,通过使用转义字符,可以表示键盘上的有的或者没有的所有字符。常见的转义字符序列有:
\ddd(八进制) 、 \uxxxx(十六进制Unicode字符)、\‘(单引号)、\"(双引号)、\\ (反斜杠)\r(回车符) \n(换行符) \f(换页符) \t(制表符) \b(回格符)
字符串字面值则使用双引号,字符串字面值中同样可以包含字符字面值中的转义字符序列。字符串必须位于同一行或者使用+运算符,因为java没有续行转义序列。
java有两种类型(type),与之相对应的是两种数据的值(two kinds of data values that can be stored in variable, pass as arguments and returned by methods),这两只data values是:primitive values,reference values。也许这么理解起来更方便(虽然不严谨),Java变量有两种:primitive variable和reference variable,在变量中,它们分别存储primitive value和reference value。
null是一种特殊的type,但是你不能声明一个变量为null类型,null type的唯一取值就是null。null可以负值给任意的引用类型或者转化成任意的引用类型。在实践中,一般把null当做字面值(literal),这个字面值可是是任意的引用类型。
2. 基本类型:
Java为基本类型提供语言级别的支持,即已经在Java中预定义,用相应的保留关键字表示。基本类型是单个值,而不是复杂的对象,基本类型不是面向对象的,主要出去效率方面的考虑,但是同时也提供基本类型的对象版本,即基本类型的包装器(wrapper)。可以直接使用这些基本类型,也可以使用基本类型构造数组或者其他自定义类型。基本类型具有明确的取值范围和数学行为。