}
Java没有提供表示字符串的基本数据类型,而是通过String类来表示字符串,由于字符串有多个字符组成,因此字符串常量使用双引号括起来。如下代码:
1 // 下面代码定义了一个s变量,它是一个字符串实例的引用,是一个引用类型的变量
2 String s = '沧海月明珠有泪,蓝田玉暖日生烟。';
读者必须注意:
char类型使用单引号括起来,而字符串使用双引号括起来。
关于String类的用法以及对应的各种方法,读者应该通过查阅API文档来掌握,以此来练习使用API文档。
值得指出的是,Java语言中的单引号,双引号和反斜线都有特殊的用途,如果一个字符串中包括了这些特殊字符,则应该使用转义字符的表示形式。
例如,在Java程序中表示一个绝对路径:"c:\coeds",这种写法得不到我们期望的结果,因为Java会把反斜线当成转义字符,所以应该写成如下形式:"c:\\codes",只有同时写两个反斜线,Java才会把第1个反斜线当成转义字符,和后一个反斜线组成真正的反斜线。
3.浮点型
Java的浮点类型有两种:float和double。
Java的浮点类型有固定的表示范围和字段长度,字段长度和表示范围与机器无关。
Java的浮点数遵循IEEE 754标准,采用二进制数据的科学计数法来表示浮点数,
对于float型数值,第1位是符号位,接下来8位表示指数,再接下来的23位表示尾数;
对于double类型数值,第1位也是符号位,接下来的11位表示指数,再接下来的52位表示尾数。
注意: 因为Java浮点数使用二进制数据的科学计数法来表示浮点数,因此可能不能精确表示一个浮点数。例如,我们把5.2345556f值赋给一个float类型变量,接着输出这个变量时看到这个变量的值已经发生了改变。使用double类型的浮点数比float类型的浮点数更精确,但如果浮点数的精度足够高(小数点后的数字很多时),依然可能发生这种情况。如果开发者需要精确保存一个浮点数,则可以考虑使用BigDecimal类。
double类型代表双精度浮点数, 一个double类型的数值占8个字节、64位;
float类型代表单精度浮点数,一个float类型的数值占4个字节、32位。
Java语言的浮点数有两种表示形式:
★十进制数形式:这种形式就是简单的浮点数,例如5.12、512.0、.512。浮点数必须包含一个小数点,否则会被当成int类型处理。
★科学计数法形式:例如5.12e2(即5.12×102),5.12E2(也是5.12×102)。
必须指出的是,只有浮点类型的数值才可以使用科学计数法形式表示。例如,51200是一个int类型的值,但512E2则是浮点类型的值。
Java语言的浮点类型 默认是double类型,如果希望Java把一个浮点类型值当成float类型处理,应该在这个浮点类型值后紧跟f或F。
例如,5.12代表一个double类型的常量,占64位的内存空间;5.12f或者5.12F才表示一个float类型的常量,占32位的内存空间。
除此之外,Java还提供了3个特殊的浮点数值:正无穷大、负无穷大和非数,用于表示溢出和出错。
例如,使用一个正数除以0将得到正无穷大,使用一个负数除以0将得到负无穷大,0.0除以0.0或对一个负数开方将得到一个非数。
正无穷大通过Double或Float的POSITIVE_INFINITY表示;
负无穷大通过Double或Float的NEGATIVE_INFINITY表示,
非数通过Double或Float的NaN表示。
必须指出的是,所有的正无穷大数值都是相等的,所有的负无穷大数值都是相等的;而NaN不与任何数值相等,甚至和NaN都不相等。
只有浮点数除以0才可以得到正无穷大或负无穷大,因为Java语言会自动把和浮点数运算的0(整数)当成0.0(浮点数)处理。
如果一个整数值除以0,则会抛出一个异常:ArithmeticException:/by zero(除以0异常)。
下面程序示范了上面介绍的关于浮点数的各个知识点:FloatTest.java
1 public class FloatTest{
2 public static void main(String[] args){
3 float af = 5.2345556f;
4 //下面将看到af的值已经发生了改变
5 System.out.println(af);
7 double a = 0.0;
8 double c = Double.NEGATIVE_INFINITY;
9 float d = Float.NEGATIVE_INFINITY;
11 //看到float和double的负无穷大是相等的
12 System.out.println(c == d);
14 //0.0除以0.0将出现非数
15 System.out.println(a / a);
17 //两个非数之间是不相等的
18 System.out.println(a / a == Float.NaN);
20 //所有的正无穷大都是相等的
21 System.out.println(6.0 / 0 == 555.0/0);
23 //负数除以0.0得到负无穷大
24 System.out.println(-8 / a);
26 //下面代码将抛出除以0的异常
27 //System.out.println(0 / 0);
28 }
Java 7新增的数值中使用下画线分隔
正如前面程序中看到的,当程序中用到的数值位数特别多时,程序员眼睛“看花”了都看不清到底有多少位数。
为了解决这种问题,Java 7引入了一个新功能:程序员可以在数值中使用下画线,不管是整型数值,还是浮点型数值,都可以自由地使用下画线。
通过使用下画线分隔,可以更直观地分辨数值常量中到底包含多少位。
如下面程序所示(UnderScore.java):
1 public class UnderscoreTest{
2 public static void main(String[] args){
3 // 定义一个32位的二进制数,最高位是符号位
4 int binVal = 0B1000_0000_0000_0000_0000_0000_0000_0011;
5 double pi = 3.14_15_92_65_36;
6 System.out.println(binVal);
7 System.out.println(pi);
9 double height = 8_8_4_8.23;
10 System.out.println(height);
11 }
4.布尔型
布尔型只有一个boolean类型,用于表示逻辑上的“真”或“假”。
在Java语言中,boolean类型的数值只能是true或false,不能用0或者非0来代表。
其他基本数据类型的值也不能转换成boolean类型。
例如,下面代码定义了两个boolean类型的变量,并指定初始值(BooleanTest.java):
1 // 定义b1的值为true
2 boolean b1 = true;
4 // 定义b2的值为false
5 boolean b2 = false;
字符串"true"和"false"不会直接转换成boolean类型,但如果使用一个boolean类型的值和字符串进行连接运算,则boolean类型的值将会自动转换成字符串。看下面代码(程序清单同上)。
1 //使用boolean类型的值和字符串进行连接运算,boolean类型的值会自动转换成字符串
2 String str = true + "";
4 //下面将输出true
5 System.out.println(str);
boolean类型的值或变量主要用做旗标来进行流程控制,Java语言中使用boolean类型的变量或值控制的流程主要有如下几种:
★ if条件控制语句
★ while循环控制语句
★ do循环控制语句
★ for循环控制语句
除此之外,boolean类型的变量和值还可在三目运算符(?:)中使用。