基本数据类型及基本操作.ppt
Java程序设计,第2章 基本数据类型及基本操作,楚雄师范学院计算机科学系 java程序设计课程,2/138,学习目标,1.理解Java语言中标识符的构成方法和关键字的概念,理解变量和常量的作用和声明方法,能正确书写合符Java语法的复杂的表达式和赋值语句,掌握各种运算符的使用,会三种注解方法。2.理解数值数据类型,掌握其运算方法;理解Java语言对字符的编码方法,理解字符数据类型,并掌握其运算方法;理解布尔数据类型,掌握布尔基本运算;理解字符串类型,掌握其基本运,楚雄师范学院计算机科学系 java程序设计课程,3/138,学习目标,运算;理解类型转换的概念和种类,掌握各种数据类型之间的转换方法。3.理解Java语言输入输出的基本方法,能理解并掌握程序中控制台输入和输出的实现方法(包括Scanner类的使用与println和printf的使用)以及使用对话框实现输入和输出的方法(包括JOptionPane类中的showInputDialog和showMessageDialog方法)。4.理解并掌握好的编程风格;理解程序测试和调试的基本概念和基本方法。,楚雄师范学院计算机科学系 java程序设计课程,4/138,内容摘要,2.1 引言2.2 变量、常量与表达式2.3 数值数据类型及其运算2.4 字符数据类型及其运算2.5 类型转换,楚雄师范学院计算机科学系 java程序设计课程,5/138,内容摘要,2.6 布尔数据类型及其运算2.7 字符串类型String2.8 输入2.9 输出2.10 编程风格2.11 测试与调试,楚雄师范学院计算机科学系 java程序设计课程,6/138,内容摘要,2.1 引言2.2 变量、常量与表达式2.3 数值数据类型及其运算2.4 字符数据类型及其运算2.5 类型转换,楚雄师范学院计算机科学系 java程序设计课程,7/138,内容摘要,2.6 布尔数据类型及其运算2.7 字符串类型String2.8 输入2.9 输出2.10 编程风格2.11 测试与调试,楚雄师范学院计算机科学系 java程序设计课程,8/138,2.1 引言,在前面章节,我们介绍了如何创建、编译和运行Java程序。从前面章节介绍的简单Java程序中我们可以看到,程序中包含数据和运算两种基本成份,它们描述了事物的属性和行为。在本章中,我们将介绍Java的基本数据类型、基本运算和相关的概念。,楚雄师范学院计算机科学系 java程序设计课程,9/138,内容摘要,2.1 引言2.2 变量、常量与表达式2.3 数值数据类型及其运算2.4 字符数据类型及其运算2.5 类型转换,楚雄师范学院计算机科学系 java程序设计课程,10/138,2.2变量、常量与表达式 2.2.1 标识符、关键字与注释,我们首先来看一个编写程序的例子。例2.1 编写一个Java程序,它接受用户输入两个实数,并输出其平均值。解答:完成该问题的程序前面曾给出过,这里重新给出,并配上注释。1/*本程序计算两个数的平均值。2 运行时,先由用户输入两个数然后,3 系统在屏幕上显示出它们的平均值*/,楚雄师范学院计算机科学系 java程序设计课程,11/138,2.2.1 标识符、关键字与注释,4 import javax.swing.JOptionPane;5 public class average26 7 public static void main(String args)8 9 String v1,v2;10 float a,b,c;11 v1=JOptionPane.showInputDialog(输入第一个数);,楚雄师范学院计算机科学系 java程序设计课程,12/138,2.2.1 标识符、关键字与注释,13 a=Float.parseFloat(v1);14 b=Float.parseFloat(v2);15 c=(a+b)/2;16 System.out.println(The average is:+c);17 18 例子说明:该程序由一个类构成,该类由两个部分构成:,楚雄师范学院计算机科学系 java程序设计课程,13/138,2.2.1 标识符、关键字与注释,第一部分是类头,由第5行给出,它用class声明从本处开始的是一个类,用public声明该类是公共的,并给出了本类的类名为average2;类的第二部分称为类体,由第6行到第18行构成,它以“”开始且以“”结束,中间部分是由方法构成。该类包含一个称为main的方法(第7行至第17行)。在这个程序中main方法包含有8条语句,语句使用分号(;)结束。其中,楚雄师范学院计算机科学系 java程序设计课程,14/138,2.2.1 标识符、关键字与注释,其中第9行是一条声明语句,它使用String声明2个字符串变量v1和v2;第10行也是一条声明语句,使用float声明三个实型变量a、b和c;第11、12行都是调用类JOptionPane的方法showInputDialog来接受用户输入数据,如图2-1所示,并返回输入结果,然后分别赋值给(即存放到)v1和v2。,楚雄师范学院计算机科学系 java程序设计课程,15/138,2.2.1 标识符、关键字与注释,楚雄师范学院计算机科学系 java程序设计课程,16/138,2.2.1 标识符、关键字与注释,第11、12行中,赋值给v1和v2的是字符串数据,需要转换为算术类型如float实数型,才能进行算术运算,所以第13、14行调用Float类的方法parseFloat分别v1和v2转换为float实数型数据并分别赋值给(即存放到)变量a和b;第15行计算a和b的平均值,并将计算结果赋值给(存放到)变量c;第16行是语句,它在屏幕上输出“The average is:”+c的结果,,楚雄师范学院计算机科学系 java程序设计课程,17/138,2.2.1 标识符、关键字与注释,这里“The average is:”是一个字符串,通过加号(+)把它与变量c的值合并成一个新的串作为结果输出。该程序的第1、2、3行是注释行,由/*开始后跟注释的文字,且由*/结束。注释并不是程序的一部分,它只起到说明的作用,以便使程序可读性强,编译程序在编译源程序时会去除注释,不会编译它的。第4行是导入(import)语句,它导入Java扩展包javax的swing包中的类JOptionPane,楚雄师范学院计算机科学系 java程序设计课程,18/138,2.2.1 标识符、关键字与注释,该类提供了方法showInputDialog,这能保证第11、12行正确执行。在上述例子中,我们用到了许多符号,如v1、println、average2、等等,这些符号我们称为标识符:它是一个由字母、数字、下划线(_)和美元符号($)构成的,且不能由数字开始的符号串;标识符不能是关键字,也不能是true、false和null。标识符是用来命名变量、常量、方法、类和,楚雄师范学院计算机科学系 java程序设计课程,19/138,2.2.1 标识符、关键字与注释,包等。例如,ComputeVolume、$6、average、root1、sum和showInputDialog都是合法的标识符,而2_root、v-1和123都不是合法标识符。注:与C语言相同,在Java语言中大小写是需要区分的,所以,像X和x是两个不同的标识符。在上述例子中,我们还用到另一些符号,如public、class、static和void等,这些符号我们称为关键字,它是指Java系统保留,楚雄师范学院计算机科学系 java程序设计课程,20/138,2.2.1 标识符、关键字与注释,下来自己使用的、用来作特殊用途且具有特殊意义的符号串,又称为保留字。例如,编译器看到class,就知道class后面的标识符是该类的名字。在例2-1中的关键字还有import和float。表2-1列出了Java语言保留专用的50个关键字。,楚雄师范学院计算机科学系 java程序设计课程,21/138,2.2.1 标识符、关键字与注释,楚雄师范学院计算机科学系 java程序设计课程,22/138,2.2.1 标识符、关键字与注释,注:关键字goto和const是C+保留的关键字,但是在Java中不能使用。如果它们出现在Java程序中,Java编译器能够识别它们并产生错误信息。在例2-1中,我们使用了与第1章例子不同的方法来进行注释。事实上,在Java程序中,注释可使用三种方法:第一种是使用/开始后跟注释的文字,且注释文字不能换行,即以/开始的注释,其以换行符为结束标志。,楚雄师范学院计算机科学系 java程序设计课程,23/138,2.2.1 标识符、关键字与注释,第二种方法是,以/*开始后跟注释的文字,且注释文字可以换行,注释以*/结束。第三种方法是,以/*开始后跟注释的文字,且注释文字可以换行,注释以*/结束。第三种方法不同于第二种方法的地方是,它可以通过JDK的javadoc命令把java源程序中的相应注释转换为HTML网页文件。,楚雄师范学院计算机科学系 java程序设计课程,24/138,2.2.2 变量,变量是用来存放数据的,它使用标识符作为名字。在前面所有例子中,我们都使用了变量。由于数据有各种类型,大小不等,且不同类型的数据其运算也不完全一致,所以,变量也具有类型;不同类型变量存放的数据的大小或精度也不一样,能进行的运算也各异。,楚雄师范学院计算机科学系 java程序设计课程,25/138,2.2.2 变量,为了使用变量,我们必须声明它,必须说明其类型和名字。变量声明的格式为:,;Java语言有各种类型符,可以声明各种类型变量,后面我们将逐步介绍。下面是一些变量声明的例子:,楚雄师范学院计算机科学系 java程序设计课程,26/138,2.2.2 变量,int a;/把a声明为一个整型变量,用来存放整型值float v1,v2,average;/把v1、v2和average声明为单精度实数类型,用来存放实型数double x1,x2;/把x1和x2声明为双精度实数类型,用来存放实型数char ch1,ch2;/把ch1和ch2声明为字符型,用来存放单个字符,楚雄师范学院计算机科学系 java程序设计课程,27/138,2.2.2 变量,变量在声明的同时也可以存放相应数据,我们把这种情形称为变量初始化。下面是变量初始化的例子:int a=6;/把a声明为一个整型变量,并初始化为6float v1=2.3,v2=5.6;/把v1和v2声明为单精度实数类型,并分别初始化为2.3和5.6,楚雄师范学院计算机科学系 java程序设计课程,28/138,2.2.2 变量,注:按照习惯,变量名使用小写字母。如果一名字由多个词组成,把所有词连接起来,除了第一个词,其他词的第一个字母都要大写,例如,computeVolum和equationRoot1。,楚雄师范学院计算机科学系 java程序设计课程,29/138,2.2.3 常量,常量是用来表示永远都不会发生变化的数据。声明常量的语法格式为:final=,=,=;final是Java的关键字,表示常量不会改变。下面是一些常量声明的例子:final float PI=3.1415;final int G=10,K=2;,楚雄师范学院计算机科学系 java程序设计课程,30/138,2.2.3 常量,注:常量必须在使用前声明和初始化。一经说明,就不能改变常量的值。按照习惯,常使用大写字母命名,如PI。,楚雄师范学院计算机科学系 java程序设计课程,31/138,2.2.4 表达式,在例2-1中,我们还用到了+、/、=、(和)等运算符。运算符是用来构成表达式的,所谓表达式是使用各种运算符连接变量、常量和方法而成的式子。例如,(b*b-4*a*c)/(2*a)。表达式必须计算出一个值来。和我们熟知,楚雄师范学院计算机科学系 java程序设计课程,32/138,2.2.4 表达式,的情形一样,在计算表达式时,必须按照一定的计算顺序进行。不同的运算符具有不同的优先级别,表达式中的运算符决定了计算该表达式时顺序,同级别的运算符按照结合性来确定计算顺序。表2-2给了一些运算符及其优先级别和结合性,Java的所有运算符见本书附录。,楚雄师范学院计算机科学系 java程序设计课程,33/138,2.2.4 表达式,楚雄师范学院计算机科学系 java程序设计课程,34/138,2.2.4 表达式,表中不同行的运算符,它们的优先级别是不一样的,在表中由上往下优先级别由高到低;在同一行的运算符,优先级别相同,当它们在表达式中处于相邻时应按结合原则确定运算顺序。下面我们以例说明。假设有int型变量a、b、c和d,其值分别为1、2、3和4。表达式a+b-c*d/5*2的运算顺序与我们在数学中是一样的,由左往右运算顺序是:,楚雄师范学院计算机科学系 java程序设计课程,35/138,2.2.4 表达式,第1个乘法(c*d=12)、除法(12/5=2)、第2个乘法(2*2=4)、加法(a+b=3)、减法(3-4=-1),其中由于这是int表达式,运算过程中的每一步按常规有小数时应舍去小数部分(注意:不进行四舍五入处理),这样12除以5为2.4,结果是12/5=2。表达式(a-b+c)*d/5*2的运算顺序与我们在数学中是一样的:,楚雄师范学院计算机科学系 java程序设计课程,36/138,2.2.4 表达式,由左往右运算顺序是:加法(a-b=-1)、减法(-1+3=2)、第1个乘法(2*d=8)、除法(8/5=1)、乘法(1*2=2)表达式+a中a先进行自增1(即累加1)的运算,使变量a为2,然后a作为表达式中的一项被引用,表达式结果为2。同样,表达式-b中的b先进行自减1(即累减1)的运算,然后b作为表达式中的一项被引用,表达式结果为1。可见,+a和-b是先运算后引用。,楚雄师范学院计算机科学系 java程序设计课程,37/138,2.2.4 表达式,但是,表达式a+中先引用a的值参加表达式运算,然后再进行自增1(即累加1)的运算,表达式结果为1,变量a中的值结果2;同样,表达式b-中先引用b的值参加运算,然后再进行自减1(即累减1)的运算,表达式结果为2,变量a中的值变为1。表达式a*b+-c*d-/5*2的运算顺序是:引用b的值、+(后缀)、-(前缀)、引用c的值、引用d、-(后缀)、,楚雄师范学院计算机科学系 java程序设计课程,38/138,2.2.4 表达式,第1个乘法、第2个乘法、除法、第个3乘法、加法,其中b+中b的值2先被先引用参与表达式运算,然后再进行+(后缀),使b为3;d-中d的值4先被引用参与表达式运算,然后再进行-(后缀)使d为3;其中-c(前缀)先进行-运算使c的值为2,然后被引用参与表达式运算。,楚雄师范学院计算机科学系 java程序设计课程,39/138,2.2.4 表达式,最后表达式结果为4。运算符%只能用于int型运算,它计算余数,所以表达式5%3和5%(-3)的结果都为2,(-5)%3的结果-2,因为5=1*3+2,5=(-1)*(-3)+2,-5=(-1)*3+(-2)。赋值表达式a+=b、a-=b、a*=b、a/=b、a%=b分别为a=a+b、a=a-b、a=a*b、a=a/b、a=a%b。赋值表达式a+=b*=c+=1,楚雄师范学院计算机科学系 java程序设计课程,40/138,2.2.4 表达式,等价于a+=(b*=(c+=1),其运算结束后,a、b和c分别为9、8和4。条件运算符(?:)构成了条件表达式,(?:)中如果成立,它的运算结果为,否则为。表达式(a+3b)?a:b的结果为a的值1,因为a+3b是成立的;表达式(ab)?a:b的结果为b的值2,因为ab是不成立的。,楚雄师范学院计算机科学系 java程序设计课程,41/138,2.2.4 表达式,注:5/2是整数除法,其结果为2;而5.0/2实数除法,其结果为2.5。所以,如果a、b和D均为整型变量,则数学表达式在Java中应写为(-b-D)/(2.0*a)。,楚雄师范学院计算机科学系 java程序设计课程,42/138,赋值语句与赋值表达式,运算符=可以构成赋值语句和赋值表达式。赋值语句的语法格式为:=;其中=的作用是使其左边的变量的值变为其右边表达式的结果,这个过程称为赋值。作为例子,我们来看下列代码:float a=12,b=34,average;/把12赋值给变量a,把34赋值给变量b,楚雄师范学院计算机科学系 java程序设计课程,43/138,赋值语句与赋值表达式,average=(a+b)/2;/计算a和b的平均值,并将其赋值给变量average由于=是运算符,所以,在Java中我们可以把赋值语句看作表达式。这样,下列例子是正确的:System.out.println(a=12);它等同于下面语句:a=12;,楚雄师范学院计算机科学系 java程序设计课程,44/138,赋值语句与赋值表达式,System.out.println(a);下面的语句也是正确的:a=b=c=12;它等同于下面语句:c=12;b=c;a=b;,楚雄师范学院计算机科学系 java程序设计课程,45/138,赋值语句与赋值表达式,注:在赋值语句中,左边变量的数据类型必须与右边的表达式结果值的数据类型兼容。例如,int型的值可以赋值给int型变量,也可以赋值给float型变量。,楚雄师范学院计算机科学系 java程序设计课程,46/138,内容摘要,2.1 引言2.2 变量、常量与表达式2.3 数值数据类型及其运算2.4 字符数据类型及其运算2.5 类型转换,楚雄师范学院计算机科学系 java程序设计课程,47/138,2.3 数值数据类型及其运算,我们上节提到,不同类型数据的大小是不一样的,所以,它们所需要的存储空间大小也各不相同;编译器将根据变量或常量的数据类型为它们分配所需要的存储空间。Java语言为数值、字符值和布尔数据提供了多种基本数据类型。本节介绍数值类型及其相关运算。,楚雄师范学院计算机科学系 java程序设计课程,48/138,2.3 数值数据类型及其运算,Java语言提供了六种数值类型:四种整型和两种浮点类型。表2-3列出了六种数值类型及其值范围所占的存储空间。,楚雄师范学院计算机科学系 java程序设计课程,49/138,2.3 数值数据类型及其运算,楚雄师范学院计算机科学系 java程序设计课程,50/138,2.3 数值数据类型及其运算,注:在Java语言中,byte、short、int、long都是有符号数,并且采用32-bit IEEE754标准表示float型数据,采用64-bit IEEE754标准表示double型数据。我们在Java程序中,经常需要直接书写数据,例如下面语句中的3.1415和100:final float PI=3.1415;int bound=100;,楚雄师范学院计算机科学系 java程序设计课程,51/138,2.3 数值数据类型及其运算,这种直接书写的数据,我们称之为直接量(literal)。一般情况下,整型直接量是可以直接赋值给整型变量的,但当直接量太大以致超出变量的范围时,就会出现编译错误。例如,byte b=1000会引起编译错误,这是因为byte型变量存放不下1000。整型直接量默认为是int型的,其值在-231(-2147483648)到231-1(147483647)之间。,楚雄师范学院计算机科学系 java程序设计课程,52/138,2.3 数值数据类型及其运算,当需要写一个long型的整型直接量,则应在其后加字母L或l(L的小写),如2147483648L。默认情况下,整型直接量是十进制数。然而,在Java语言中,直接量也可以使用八进制和十六进制。要写一个八进制数,用0(零)开头;要写一个十六进制数,用0 x或0X(零x)开头。例如,下列语句输出八进制数和十六进制数:,楚雄师范学院计算机科学系 java程序设计课程,53/138,2.3 数值数据类型及其运算,System.out.println(056);/输出八进制数56System.out.println(0 x5F);/输出十六进制数5F除了整型直接量外,我们也可以写浮点型直接量。浮点型直接量被默认为是double型的,例如,5.0认为是double型大同而不是float型。,楚雄师范学院计算机科学系 java程序设计课程,54/138,2.3 数值数据类型及其运算,同样地,可以通过在直接量后面加字母f或F表示float型直接量,加d或D表示double型直接量。例如,10.2f表示float型值,10.2d表示double型值。浮点直接量也可以使用科学记数法。例如,0.001234可以写成1.234e-3或1.234E-3,123.45可以写成1.2345e2或1.2345E2。,楚雄师范学院计算机科学系 java程序设计课程,55/138,内容摘要,2.1 引言2.2 变量、常量与表达式2.3 数值数据类型及其运算2.4 字符数据类型及其运算2.5 类型转换,楚雄师范学院计算机科学系 java程序设计课程,56/138,2.4 字符数据类型及其运算,字符可分为两种类型:可打印字符和不可打印字符,其中可打印字符包括小写字母、大写字母、数字、标点符号以及诸如+、*和%这样的特殊字符等,它们都有相应的图形符号;不可打印字符有换行符、空格符、跳格符和响铃符等,它们没有相应的图形符号。,楚雄师范学院计算机科学系 java程序设计课程,57/138,2.4 字符数据类型及其运算,字符数据类型char用来表示单个字符。字符型直接量使用单引号括起来,如字符a的直接量写为a。每个字符在计算机中使用二进制表示,其表示方法称为编码(encoding),字符有许多不同的编码方法,编码方案定义了字符如何编码。,楚雄师范学院计算机科学系 java程序设计课程,58/138,2.4 字符数据类型及其运算,ASCII码(American Standard for Information Interchange,美国标准标准交换码)是一种计算机广泛使用的字符编码方案,它定义了128个基本字符,由7个二进制位表示。在计算机中,ASCII码使用一个字节(8位)存储,其高位为0。8位的ASCII码又称为扩展ASCII码。在Java语言中,字符采用的是统一码(Unicode)方案,,楚雄师范学院计算机科学系 java程序设计课程,59/138,2.4 字符数据类型及其运算,它是由Unicode Consortium建立的一种16位编码方案,支持世界不同语言的文本交换、处理和显示(详细信息参见统一网站)。Unicode占两个字节,书写上以u开头的4位十六进制数表示,范围从u0000到uFFFF。例如,单词coffee翻译成中文需要两个字,楚雄师范学院计算机科学系 java程序设计课程,60/138,2.4 字符数据类型及其运算,符,它们的统一码为u5496u5561。统一码可以表示65536个字符,且前128个统一码即u0000到u00FF用来表示ASCII字符。例如,下面两条语句都把字符A赋值给char型变量letter:char letter=A;char letter=u0041;,楚雄师范学院计算机科学系 java程序设计课程,61/138,2.4 字符数据类型及其运算,在Java语言中,对于不可打印的特殊字符以及(反斜杠)、(单引号)和(双引号)等字符,它们对应的直接量,需要转义字符来表示,即以反斜杠符号开始的一个字符,例如,n表示换行符、表示反斜杠、表示单引号,这种表示法也称为换码序列。表2-4列出了Java语言中的转义序列。,楚雄师范学院计算机科学系 java程序设计课程,62/138,2.4 字符数据类型及其运算,楚雄师范学院计算机科学系 java程序设计课程,63/138,2.4 字符数据类型及其运算,由前述我们知道,字符在计算机内部是使用二进制编码的。所以,在Java中字符型的直接量可以进行算术加或减运算。例如,字符A的Unicode码为u0041,而A+1的Unicode码为u0042,表示字符B,如果把它作为int型数据时则为66。,楚雄师范学院计算机科学系 java程序设计课程,64/138,内容摘要,2.1 引言2.2 变量、常量与表达式2.3 数值数据类型及其运算2.4 字符数据类型及其运算2.5 类型转换,楚雄师范学院计算机科学系 java程序设计课程,65/138,2.5 类型转换,表达式的计算结果具有一个特定的数据类型,该类型依赖于表达式中的各种运算对象(常量、变量、函数返回值),这些运算对象的类型可以互不相同,但编译器可以根据情况为表达式结果确定一个特定类型。这种在表达式运算过程中系统根据运算对象的类型确定计算结果类型的现象称为类型转换。类型转换的原则是把简单类型对象转换为复杂类型对象,其方式有隐式类型转换和显示类型转换,如图2-2所示。,楚雄师范学院计算机科学系 java程序设计课程,66/138,2.5 类型转换,楚雄师范学院计算机科学系 java程序设计课程,67/138,2.5 类型转换,实际上,表达式在计算过程中即要进行类型转换,因为不同数据类型的算术运算在计算机内实现时采用的运算指令是不完全相同的。事实上,不同类型数据与具体的运算符具有关联性,换言之,不同类型数据在做相同算术运算时,其在计算机内部实现的指令是不相同的。例如,同是加(+)运算,编译器为“12+56”与“12.3+4.78”选用的运算指令是不相同的。,楚雄师范学院计算机科学系 java程序设计课程,68/138,2.5.1 隐式类型转换,隐式类型转换是自动发生的,不需要我们做任何工作。所有数值型的值都可以赋值给范围更大的类型的变量。所以,char类型可以用于任何int类型合法使用的地方,浮点型数值可以赋值给任何具有相同或更高精度的浮点变量。例如,下列语句是合法的:,楚雄师范学院计算机科学系 java程序设计课程,69/138,2.5.1 隐式类型转换,1 int v1;2 char letter=B;/字符B的Unicode为u0042,该代码对应的十进制数为663 v1=letter+12;/letter中的编码被自动转换为int型数据,然后与12相加4 System.out.println(The value is:+v1);,楚雄师范学院计算机科学系 java程序设计课程,70/138,2.5.1 隐式类型转换,在第3行,letter中的编码被自动转换为int型数据,然后与12相加,结果赋值给int型变量v1。该段语句输出结果为:The value is:78下列语句也是合法的:1 float fv=123.456F;/fv被初始化为float型直接量,楚雄师范学院计算机科学系 java程序设计课程,71/138,2.5.1 隐式类型转换,2 double dv1,dv2=23.985;/dv2被初始化为double型直接量3 dv1=dv2+fv;4 System.out.println(The value is:+dv1);在第3行中,float型变量fv中数据首先被自动转换为double型,然后与dv2相加,结果赋值给double型变量dv2。该段语句输出结果为:,楚雄师范学院计算机科学系 java程序设计课程,72/138,2.5.1 隐式类型转换,注:上述隐式类型转换过程中,变量letter和变量fv本身没有被转换,被转换的是从它们引用来的数据。而下列语句却是不合法的:1 float fv1,fv2=123.456F;/fv2被初始化为float型直接量2 double dv=23.985;/dv被初始化为double型直接量,楚雄师范学院计算机科学系 java程序设计课程,73/138,2.5.1 隐式类型转换,3 fv1=dv+fv2;4 System.out.println(The value is:+dv1);Java编译器将指出在第3行中,dv的double型数据参与float型数据fv2运算并赋值给float型变量fv1时,将有可能损失精度。表2-5列出了各种类型可以隐式地转换为的类型。,楚雄师范学院计算机科学系 java程序设计课程,74/138,2.5.1 隐式类型转换,从表2-5可以看出,char型数据可以与其他数值型数据进行算术运算,并赋值给相应数值型变量。,楚雄师范学院计算机科学系 java程序设计课程,75/138,2.5.2 显式类型转换,当某种类型不能通过隐式转换赋值给另一种类型时,则必须通过强制转换显式地完成类型转换。例如,char型数据不能隐式地转换为byte类型,所以,必须对char型数据进行类型强制转换,才能赋值给byte类型变量。注:再一次说明,把某类型变量的数据转换为另一类型时,只是从原类型变量中引用数据,,楚雄师范学院计算机科学系 java程序设计课程,76/138,2.5.2 显式类型转换,然后转换该数据的类型,而原类型变量本身及其中数据并没有发生类型转换。显式类型转换的语法格式为:()它把的结果数据的类型转换为表示的类型。其中()的运算优先级低于+(后置)、,楚雄师范学院计算机科学系 java程序设计课程,77/138,2.5.2 显式类型转换,-(后置)、+(前置)、-(前置)、+(一元)和-(一元)等,而高于*、/、%、+、-以及其他算法运算符等;其结合性为由右向左。例如,(short)12.3+4.6的结果数据是double类型,而不是short类型,因为(short)优先级高于+,所以先进行的运算是(short)12.3,其结果为short类型数据12,然后进行12+4.6运算,即把12隐式转换为,楚雄师范学院计算机科学系 java程序设计课程,78/138,2.5.2 显式类型转换,double类型并与4.6进行+运算,结果为double类型数据16.6。注:实数型直接量如4.6的默认类型是double类型。当进行类型强制转换时,转换后的新值必须是转换前的旧值的最佳表示。例如,下列语句把float型数据显式地转换为int类型:float old_V=12.6F;,楚雄师范学院计算机科学系 java程序设计课程,79/138,2.5.2 显式类型转换,int new_V=(int)old_V;转换时,12.6的小数部分被舍去,结果new_V被初始化为12。注:也有一些类型数据,不能显式地强制转换为其他类型。例如,后面介绍的boolean类型数据就不能显式地强制转换为其他类型。,楚雄师范学院计算机科学系 java程序设计课程,80/138,内容摘要,2.6 布尔数据类型及其运算2.7 字符串类型String2.8 输入2.9 输出2.10 编程风格2.11 测试与调试,楚雄师范学院计算机科学系 java程序设计课程,81/138,2.6 布尔数据类型及其运算,在编制程序过程中,经常需要设计条件判断或条件表达式,而条件表达式的结果只能是两种情形之一,即要么为“真”,要么为“假”。在Java语言中,“真”采用true表示,“假”采用false表示,它们就是布尔数据类型(Boolean)直接量。布尔类型也称为逻辑类型,布尔数据也称为逻辑数据。本节介绍布尔数据类型及其运算。,楚雄师范学院计算机科学系 java程序设计课程,82/138,2.6.1 关系表达式,最简单的条件表达式是一个关系运算符连接两个数据而形成的简单关系表达式,如a0、b=0、x=y等。表2-6列出了Java语言提供的六种关系运算符。在表2-6中还给出了关系运算符的优先级和结合性,并给了若干例子。,楚雄师范学院计算机科学系 java程序设计课程,83/138,2.6.1 关系表达式,楚雄师范学院计算机科学系 java程序设计课程,84/138,2.6.1 关系表达式,关系运算符的优先级低于算术运算符,而高于赋值类运算符(如*=)。例如,关系表达式12+4=6的结果为false。字符也可以进行比较,字符的比较是按它们的统一码来进行的。例如,因为a统一码为u0061,A的统一码为u0041,所以a大于A。,楚雄师范学院计算机科学系 java程序设计课程,85/138,2.6.2 布尔运算,要表达复杂条件如“a=0且b0”,只有简单关系表达式是不够的,我们还得有布尔运算“与(和,并且,同时)”、“或”及“非”,它们的符号见表2-7。,楚雄师范学院计算机科学系 java程序设计课程,86/138,2.6.2 布尔运算,楚雄师范学院计算机科学系 java程序设计课程,87/138,2.6.2 布尔运算,如果要描述条件“a=0且b0”,则我们写为:a=0&b!=0。这里关系运算符的计算优先级要比布尔运算符如&(与)和|(或)高。布尔运算符含义见表2-8、2-9、2-10和2-11。,楚雄师范学院计算机科学系 java程序设计课程,88/138,2.6.2 布尔运算,楚雄师范学院计算机科学系 java程序设计课程,89/138,2.6.2 布尔运算,楚雄师范学院计算机科学系 java程序设计课程,90/138,2.6.2 布尔运算,楚雄师范学院计算机科学系 java程序设计课程,91/138,2.6.2 布尔运算,楚雄师范学院计算机科学系 java程序设计课程,92/138,2.6.2 布尔运算,用布尔运算符连接而成的式子称为布尔表达式。布尔表达式的计算结果只有两种情形,即真(true)值和假(false)值,它们可以存放在布尔类型变量中。布尔类型变量采用Boolean声明。例如,下列是正确的布尔表达式:(a!=0)&(b*b-4*a*c=0),楚雄师范学院计算机科学系 java程序设计课程,93/138,2.6.2 布尔运算,(b=0)&(c!=0)注意:关系运算符的优先级比布尔运算符(除!运算符外)高,比算术运算符低;!运算符的优先级除了比圆括号()、(数组下标)、对象成员访问符(.)、+(后置,前置)、-(后置,前置)、+(一元)和-(一元)低之外,都比其他运算符高。为了提高运算效率,系统在运算含有&和,楚雄师范学院计算机科学系 java程序设计课程,94/138,2.6.2 布尔运算,|运算符的逻辑表达式时,只要得到了结果真或假,其计算过程即停止。假设exp1和exp2是表达式,且exp1的值为false,则在对布尔表达式exp1&exp2求值时,不会对exp2求值,因为false&exp2 的结果必为false。类似地,如果exp1的值为true,则在对布尔表达式,楚雄师范学院计算机科学系 java程序设计课程,95/138,2.6.2 布尔运算,exp1|exp2求值时,不会对exp2求值,因为true|exp2 的结果必为true。,楚雄师范学院计算机科学系 java程序设计课程,96/138,内容摘要,2.6 布尔数据类型及其运算2.7 字符串类型String2.8 输入2.9 输出2.10 编程风格2.11 测试与调试,楚雄师范学院计算机科学系 java程序设计课程,97/138,2.7 字符串类型String,在2.4节中,我们介绍了字符类型,它是用来处理单个字符的。要处理多个字符构成的序列,需要使用字符串类型。所谓字符串就是由多个字符构成的序列;构成字符串的字符个数称为字符串长度。字符串类型的直接量使用双引号括起来,例如,由字符a、b和c构成的一个字符串直接量为abc,其长度为3;由一个空格符构成的字符串为,其长度为1;长度为0,楚雄师范学院计算机科学系 java程序设计课程,98/138,2.7 字符串类型String,的字符串记为,且称其为空串。Java使用String类型来声明字符串类型变量,它可以存储字符串。例如,下列是合法的语句:String s1,s2,s3=Hi!;s1=s3;s2=He said:Come on;,楚雄师范学院计算机科学系 java程序设计课程,99