Java的数据类型和C语言的比起来,可算的上是简单了许多,而且更为重要的一点是Java的基本数据类型不论在什么平台上,都具有统一的长度——这一点是Java实现跨平台性的一个必要的技术准备。
在Java中,数据类型分了两大类:基本数据类型以及引用类型。引用类型放在以后讲,这一节的主角是基本数据类型。
Java中的基本数据类型一共有八个:boolean、byte、short、int、long、float、double、char。这八个基本数据类型从特征上又分为4大类:布尔型、整型、浮点型以及字符型。下面我们分类开始给大家介绍。
Java中的布尔型其实指的就是boolean类型,为什么取了个这么怪的名字?原来100多年前,英国数学家布尔发表论文,利用代数研究逻辑问题,并奠定了数理逻辑的基础。由此,我们一般将用于数理逻辑运算的数据对象称为“布尔型”数据。数理逻辑是个非常复杂的东西,我在大学时学的那是晕头转向,不过很讽刺的是,布尔型数据只有区区两个值:“真”和“假”。与之对应,Java中的boolean类型只包含两个常量:true、false。
这里顺带介绍几句关于常量的知识。常量分了两大类,一类是字面常量(英文是literal),一类是符号常量。符号常量我们放在和final关键字一起讲。而所谓的字面常量指的是相应类型的字面表达形式。例如,我们用“true”表示boolean类型中的“真”的含义,一目了然,不需要拐几个弯才能想到。
Java的整型数据类型一共有四个:分别是byte、short、int、long。整型数据就是我们通常说的“整数”。如果还有人想接着问“什么是整数”,那我的回答是“面壁三年,复习小学数学,争取达到小学毕业水平”,J。
那既然表示整数,为什么会出现4种类型的整型?这主要是因为这四种类型的所占字节数以及取值范围有差异。其中byte类型只占1个字节,取值是;short类型占2个字节,取值范围;int类型占4个字节,取值范围;而long类型占8个字节,取值范围。取值范围只给出了指数形式,具体的数值就有劳各位自己去算了。每种数据类型都有自己的用途,例如byte型数据经常应用于底层的数据传输;long型经常用于数据库编程中;而int型则是开发中最为常用的整数类型。
接下来我们再看看整型的字面常量如何表示。大多数情况下,我们用十进制表示一个整数,比如85、51、2等;有时候也会使用十六进制表示整数,十六进制以0X(或0x)作为前缀,后面跟着数字或者字母A~F(或a~f),例如0x1、0X25、0xabcd、以及0XCE1F都是十六进制的字面常量;用的最少的是八进制,至少我几乎没有在开发中使用过八进制的字面常量,当你看见一个数字以0开头、而后面跟着几个0到7之间的数字时,说明你看到的是一个八进制的字面常量,如07、017、025都是八进制字面常量。
不过,我们需要注意,上段中所有字面常量,我们都可以认为是int型的常量,如果我们想表示一个long型的常量的话,那么则必须在其后加上大写(或小写)字母L,例如0xABL表示long型的十六进制数0xAB,还有像1193827L,07L等都表示long型的整数,虽然我们也可以使用L的小写形式,不过建议大家最好不好使用,因为很容易和数字1混淆。
可能有些喜欢思考的会问我,如何表示byte和short型的常量呢?这个嘛……,你会在后面看到的。
浮点型数据是用来表示小数的。计算机使用的是二进制数进行运算,二进制表示整数没有太大的问题,可是在表示小数时,问题就出现了,很多在十进制中的有限小数在二进制体系中却是无限不循环的。由于两种进制之间的差异,因此十进制的小数使用二进制存储时往往只能存储其近似的数值。而且,为了在有限的字节中尽量多的表示更大范围的数值,在计算机内部通常都采用了浮点形式存储小数,这也就是我们将小数类型称为浮点型数据的缘故。浮点型数据有两种类型:float和double,表示了存储小数的两种不同算法,它们的差异主要表现在精度上。
在Java中,float类型的数据占用了4个字节;而double类型的数据占用了8个字节。从它们所占用的字节数中我们也可以看出,double型的数据精度更高。那么浮点型的字面常量如何表示?
先看一下最常用的表示方法,3.1415926、125.8应该都是我们熟悉的形式,不过在Java中,还可以使用指数形式表示一个小数,例如31.4e25表示。上面这几个例子都是表示double型数据,而如果我们还需要强调这些数是double型数据的话,那么可以在数值之后加上字母D(大小写都可以),例如3.14d,31.4e5D。如果需要表示float型的常量,则必须在数值之后加上大写或者小写的F,例如3.14f、125.8F。
字符型只包含了char类型,char类型是用来表示字符数据的。C程序员要注意了,在C语言中,也包含了表示字符的char类型。不过Java中的char型与C语言相比,有比较大的区别。在Java中,一个char类型的数值需要占用两个字节,这是因为在Java中使用了Unicode编码表示字符,所以,Java中的字符不仅仅能表示英文字母,还能表示世界上大多数的语言,例如,一个Java字符就可以表示一个汉字,而在C语言中,表示一个汉字需要使用两个字符。同样,对于C语言来说,字符型数据从本质上其实是可以看成一个无符号的整数类型,这一点java也延续了这个做法,在语法上可以把字符型数据看成是整数类型,并且和可以和int,long等整型数据进行转换。
在Java中如果想表示一个字符字面常量,则必须将这个字符常量使用一对单引号将这个字符围起来,例如‘a’和‘世’都是合法的字符。和C语言一样,Java也有转义字符,如‘\”’表示一个双引号,‘\t’表示制表符,‘\n’表示换行符,‘\r’表示回车符,‘\\’表示斜杠等,上面这五个都是比较常用的转义字符,希望大家记住它们,以后肯定还能用得上。
除了上面的形式之外,在Java中还可以用字符的Unicode码来表示它。例如字符‘a’可以用‘\u0061’表示,字符‘张’可以用‘\u5f20’表示。使用Unicode码表示字符要注意下列几个规则:
1、必须使用\u作为前缀;
2、必须使用四位十六进制数表示,如果Unicode编码比较小,则前面用0补足四位(看到前面‘a’的例子了?);
3、当然,别忘记用单引号(’)将字符围起来。
什么是字符串?所谓的字符串,就是由多个字符组成的一个字符组,程序将把这个字符组作为一个整体。字符串有两个很特殊的性质:一方面,字符串不可能作为一个基本数据类型单独存在;另一方面,字符串在一个应用程序中往往比其他类型使用的更为频繁。由于这两个原因,决定了字符串在任何程序设计语言中都具有特殊地位。在本节中,我们只是简单的介绍字符串的基本知识,在以后的章节中,还将陆续涉及到字符串的其他内容。
首先看看如何表示一个字符串,在Java中,我们使用一对双引号(“)将字符串围起来。例如:“Hello,world”、“你好,Java”都是字符串。正如我们前面所说——字符串由一组字符组成,所以在字符串中,同样也可以使用转义字符,可以直接内嵌字符的Unicode编码等等。而需要声明一个能指向字符串对象的变量则必须使用String。例如:
String str = "\u0061\u0062\\\'\""; //表示字符串 ab\’”
在上面这个例子中,String str表示定义了一个变量可以指向一个字符串,而"\u0061\u0062\\\'\""; 则表示定义了一个字符串对象。最后请大家在注意一下:字符串并不是Java中的基本数据类型。好了,字符串就简单介绍到这。