当程序执行时,外界的数据进入计算机后,当然要有一个“栖身”之处,这时系统就会分配一个内存空间给这份数据。而在程序代码中,我们所定义的变量(Variable)与常数(Constant)的主要用途就是存储数据,并用于程序中的各种计算与处理。Java语言是一种强类型(Strongly Type)语言,意思是指:“变量在使用之前,必须声明其数据类型,我们可以任意存取这个变量的值,但是变量所声明的数据类型在程序中不可以随意变更。”
Java的数据类型可以分成“基本(Primitive)数据类型”与“引用(Reference)数据类型”。基本数据类型在声明时会先分配内存空间,目前Java共有byte、short、int、long、float、double、char和boolean八种基本数据类型。而引用数据类型则不会在声明时就分配内存空间,必须另外指定内存空间,也就是说,引用数据类型的变量值其实记录的是一个内存地址,这种类型的数据类型有数组、字符串。图2-2说明了基本数据类型中8种数据类型的分类关系。
图2-2
整数类型用来存储不含小数点的数据,与数学上的意义相同,如-1、-2、-100、0、1、2、100等。整数类型分为byte(字节)、short(短整数)、int(整数)和long(长整数)4种,按数据类型的存储单位及数值表示的范围整理如表2-1所示。
表2-1
【范例程序:CH02_01】
01 // CH02_01.java,字节数据类型声明的实例 02 public class CH02_01 { 03 public static void main (String args[ ]) { 04 byte a=123; // 声明字节数据类型并赋初值 05 byte b=1234; 06 } 07 }
【程序的编译结果】
程序的编译结果可参考图2-3。
图2-3
程序CH02_01经编译后,编译器提示程序中有一处错误,并说明是数据类型声明的错误,byte(字节)可表示的数值范围是-127~128,因而第05行导致编译失败,因为1234已经超出byte类型数值的范围,而第04行编译成功,因为123符合所规定的范围。我们可以把第05行程序修改为“short b=1234”,即采用short(短整数)数据类型,这样1234就包括在数据类型指定的范围内了。
浮点数(Floating Point)就是带有小数点的数字,也就是我们在数学上所指的实数。由于程序设计语言普遍应用于许多科学的精密运算,因此整数所能表示的数值范围显然不足,这时浮点数就派上用场了。
浮点数的表示方法有两种,一种是小数点表示法;另一种是科学记数法表示法。例如,3.14和-100.521是小数点表示法,而6e-2和3.2E-18是科学记数法表示法。在科学记数法表示法中,其中的e或E代表以10为底数,例如6e-2,其中6被称为有效数值,-2被称为指数。表2-2所示为小数点表示法与科学记数法表示法的对照表。
表2-2
尤其是当需要进行小数基本四则运算时,或者数学运算上的开平方根(
)与求三角函数的正弦、余弦等运算时,运算结果需要精确到小数点后几位,这时就会使用到浮点数类型。Java浮点数类型包含float(浮点数)和double(双精度浮点数),如表2-3所示。
表2-3
【范例程序:CH02_02】
01 // CH02_02.java,浮点数与双精度浮点数的声明 02 public class CH02_02 { 03 public static void main(String args[ ] ){ 04 float a=12.5f; 05 double b=123456.654d; 06 System.out.println("a="+a); 07 System.out.println("b="+b); 08 } 09 }
【程序的执行结果】
程序的执行结果可参考图2-4。
图2-4
【程序的解析】
程序代码的第04行声明了一个名称为a的浮点数,它被赋予的初值为12.5f,该数值的后面多加了一个字母“f”作为float(浮点数)的标记,程序代码的第05行声明了一个名称为b的浮点数,它被赋予的初值是123456.654d,这个数值的后面多加了一个字母“d”作为double(双精度浮点数)的标记。数值后面的大写字母“F”和大写字母“D”与它们的小写字母表示的意思相同。通常在编写程序时,在浮点数后面有没有这样的标记并无太大的关系。
布尔(Boolean)类型的变量用于关系运算的判断或逻辑运算的结果,例如判断“5>3”是否成立,判断结果的布尔值只有true(真)和false(假)两种。
【范例程序:CH02_03】
01 // CH02_03.java,布尔值的声明与打印输出 02 public class CH02_03 { 03 public static void main(String args[]) { 04 boolean logic=true; // 设置布尔变量的值为false 05 System.out.println("声明的布尔值="+logic); 06 } 07 }
【程序的执行结果】
程序的执行结果可参考图2-5。
图2-5
在Java中,字符数据类型为char,它是一种使用16位(16-bit)二进制数所表示的Unicode字符。表2-4列出了char数据类型的存储单位及数据值表示的范围。
表2-4
在Java程序中,可以使用单引号将字符引起来,以此表示字符数据类型的值。大家要特别注意的是,字符数值是用单引号标注单个字符而不是使用双引号,这和字符串(例如"学无止境")以双引号标注是不一样的,例如字符变量的赋值方式:
char ch1='X';
另外,也可以用'\u十六进制数字'的方式来表示字符的值,\u表示Unicode码格式。不同的字符有不同的数据表示值,如字符@的数据表示值为'\u0040',字符A的数据表示值为'\u0041'。
【范例程序:CH02_04】
01 // CH02_04.java,字符数据类型声明的实例 02 public class CH02_04 { 03 public static void main(String args[ ]) { 04 char ch1='X'; 05 char ch2='\u0058'; //Unicode编码的写法 06 System.out.println("ch1="+ch1); 07 System.out.println("ch2="+ch2); 08 } 09 }
【程序的执行结果】
程序的执行结果可参考图2-6。
图2-6
【程序的解析】
第04、05行:两种不同方式的字符数据类型写法,可以直接写字符'X',如果知道该字符的Unicode编码,也可以用字符对应的Unicode编码的十六进制数值来作为字符值。
另外,字符类型的数据中除了一般的字符外,还有一些特殊的字符无法使用键盘来输入或直接显示在屏幕上。这时必须在字符前加上反斜杠“\”来通知编译器将后面的字符当成一个特殊字符,就是所谓的转义序列字符(Escape Sequence Character),用于某些特殊的控制功能。例如,'\n'是表示换行功能的转义序列字符。有关各种转义序列字符与Unicode码之间的关系,请参考表2-5的说明。
表2-5