课程导言
【变量的赋值与计算都离不开表达式,表达式的运算依赖于变量、常量和运算符。本节课讨论Java的表达式的构成、常量的定义、运算符的分类及应用。通过本课的学习你将掌握运用表达式和运算符完成变量赋值、条件判断、数学运算、逻辑运算等功能操作】
在讲述课程内容之前,先看一个求圆面积的问题。求圆面积的公式为;
其中S为圆面积,π为圆周率,r为半径。
假设用程序来计算圆的面积,S、π、r均为变量,省略的乘号为运算符,r的2次方可以描述为r*r。则上面的公式即为求圆面积的表达式。
结合上面的案例,本节课程分为三个小节,第一小节探讨不能修改的变量—常量;第二小节探讨表达式的组成结构及运用;第三小节探讨Java的基本运算符,包括赋值运算符、算术运算符、关系运算符和逻辑运算符。
第一小节 不能修改的变量——常量
在求圆面积的表达式中,π为圆周率,它是一个不变的量,在程序运行过程中不能被修改。常量同变量一样,也占用存储单元的空间。常量的不可修改性提高了程序的稳定性,同时也提高了程序代码的可维护性。例如,可以把π定义为常量,当程序需要π参与运算时,直接调用定义的常量π即可。
在java语言中,定义常量的语法如下:
final 数据类型 常量名称 = 值;
其中,final是Java关键字,数据类型可以是Java语言支持的任何数据类型。
例如,下面的语句把圆周率定义为常量:
final double Pl = 3.14;
Java关键字是Java语言保留的一类标识符,它们用来标识一种数据类型或者程序的结构,Java关键字不能用于变量名、方法名、类名等命名。
第二小节 Java表达式
求圆面积的公式就是一个表达式,其中S、π、r为变量或常量,省略的乘号为运算符,r的2次方可以描述为r*r。求圆面积的表达式为:
S =π* r *r;
表达式是由变量、常量和运算符的组合,它执行计算并返回计算结果。在表达式中运算符作用的变量或常量称为操作数。在求圆面积的表达式中,乘号(*)为运算符,π和r为操作数。
在一些复杂的运算中,简单的表达式可以组合为复杂的表达式,其操作数本身可能就是一个表达式。例如:
(num1+num2)*(x+y)
上面的表达式中,运算符乘号(*)两边的操作数(num1+num2)和(x+y)本身就是一个表达式。表达式的计算结果一般为数值,如果表达式是一个关系表达式或逻辑表达式,表达式会返回一个布尔值,即真或假。
根据运算符的不同,可以把表达式分为赋值表达式、算术表达式、关系表达式和逻辑表达式。赋值表达式用于把等号右边的操作数赋值给等号左边的变量;算术表达式用于数值运算;关系表达式用于条件判断;逻辑表达式用于逻辑操作。
第三小节 Java运算符
运算符用于连接表达式的操作数,并对操作数执行运算。例如,表达式num1+num2,其操作数是num1和num2,运算符是”+”。在java语言中,运算符可分为5种类型:算术运算符、赋值运算符、关系运算符、逻辑运算符、位运算符。
根据操作数的不同,运算符又分为单目运算符、双目运算符和三目运算符。单目运算符只有一个操作数,双目运算符有两个操作数,三目运算符则有三个操作数。位运算符涉及到二进制位的运算,在java 程序中运用不是很多,因此下面主要介绍算术运算符、赋值运算符、关系运算符和逻辑运算符。
(1)算术运算符
算术运算符用在算术表达式中,其作用和数学中的运算符相同,下表列出了Java语言支持的算术运算符。
算术运算符一般用于数值运算,可对操作数进行加减乘除、取余、自增和自减操作。
加减乘除、取余运算符比较容易理解。下面重点说说自增和自减运算符。
自增自减是单目运算符,只需要一个操作数参加运算。例如:a++、++a、a--、--a等。其中,a是操作数,++是自增运算符,--是自减运算符,自增和自减运算符即可以放在变量的前面,也可以放在变量的后面,例如++a、 a++。
自增(++):将变量的值加1,分前缀式(如++a)和后缀式(如a++)。前缀式是先加1再使用;后缀式是先使用再加1。
自减(--):将变量的值减1,分前缀式(如--a)和后缀式(如a--)。前缀式是先减1再使用;后缀式是先使用再减1。
(2)赋值运算符
赋值运算符是双目运算符,用在赋值表达式中。它的作用是将运算符右边操作数的值赋给运算符左边的变量。下表列出了Java语言支持的赋值运算符。
赋值运算符分为两类,一类是简单赋值,一类是复合赋值。简单赋值是直接把运算符右边操作数的值赋给运算符左边的变量,运算符有“=”;复合赋值运算符复合赋值是先执行运算符指定的运算,然后再将运算结果赋值给运算符左边的变量,复合赋值运算符有“+=、-=、*=、/=、%=”。
简单赋值运算符非常容易明白和理解。下面重点说说复合赋值运算符“+=”操作,其它复合赋值运算符操作原理同“+=”运算符操作原理相同,这里就不再一一讲述了。
复合赋值运算符“+=”操作执行过程如下:
1) 将运算符右侧的操作数,与运算符左侧的操作数(变量值)执行相加操作;
2) 相加的结果赋值给运算符左侧的变量。
例如下面语句:
int num = 10;
num+= 20;
声明的变量num初始值为10,然后执行num+= 20赋值操作,其操作过程是变量num先与数值20相加,相加的结果是30,然后再将30赋值给变量num,此时变量num的值为30。
(3)关系运算符
关系运算符也是双目运算符,用于关系表达式。关系运算符对两个操作数进行比较,并返回比较结果,比较结果的值为一个布尔值(true或false)。下表列出了Java语言支持的关系运算符,表中例子假设A和B不相等,并且其A小于B。
关系运算符用于比较两个操作数的大小,两个操作数共有六种比较方式。
第一种比较方式是判断两个操作数是否相等,用运算符“==”进行运算,如果两个操作数相等,比较结果返回true,否则返回false。
第二种比较方式是判断两个操作数是否不相等,用运算符“!=”进行运算,如果两个操作数不相等,比较结果返回true,否则返回false。
第三种比较方式是判断运算符左边的操作数是否大于运算符右边的操作数,用运算符“〉”进行运算,如果左边的操作数比右边的操作数大,比较结果返回true,否则返回false。
第四种比较方式是判断运算符左边的操作数是否小于运算符右边的操作数,用运算符“<”进行运算,如果左边的操作数比右边的操作数小,比较结果返回true,否则返回false。
第五和第六种比较方式是判断运算符左边的操作数是否大于等于或小于等于右边的操作数,用运算符“〉=和<=”进行运算,如果比较结果满足要求,则返回true,否则返回false。
(4)逻辑运算符
逻辑运算符连接两个关系表达式或布尔变量,用于解决多个关系表达式的组合判断问题,返回的运算结果为布尔值。例如,在数学中,表示一个数值的范围时,经常用不等式来表述,假设一个数值取值范围为0到100,设该数值为x,不等式0100两个关系表达式,然后用逻辑运算符进行连接。下表列出了Java语言支持的逻辑运算符,表中假设布尔变量A为真,变量B为假。
逻辑运算符“&&”是双目运算符,用于判断两个关系表达式或布尔变量是否都为真,只有两个表达式的返回结果都为真时,运算结果为真,否则运算结果为假。
逻辑运算符“||”是双目运算符,用于判断两个关系表达式或布尔变量是否有一个为真,如果有一个为真,返回结果为true,否则返回false。
逻辑运算符“!”是单目运算符,用于取反关系表达式返回的值。例如:对于关系表达式a>b,如果a> b为真,取反后为false,如果a> b为假,取反后为true。
Java运算符的优先级
和数学中的运算符一样,Java运算符也存在优先级关系。在Java表达式中,优先级高的运算符先参与运算,优先级低的运算符后参与运算。下表给出了运算符的优先级,表中优先级栏,数字越小优先级越高,每个运算符用中文顿号分割。
表中结合性指运算符结合的顺序,通常都是从左到右。从右到左的运算符最典型的就是数值前面的正负号,例如3+-4,则意义为3加-4,符号首先和运算符右侧的内容结合。
■ 课程小结
1、常量是相对于变量来说的,变量在程序运行过程中,其值可以被修改,而常量是不允许被修改的。常量多用于固定不变的值,如圆周率、数值、光速等。同变量一样,常量也可以用标识符命名,并占用存储单元空间。在表达式中,数值可以直接参与运算,参与运算的数值也称为字面常量。
2、表达式同数学中的算式相同,是由变量、常量和运算符组合而成的。最简单的表达式仅由一个运算符和一个操作数构成,较复杂的表达式则由多个运算符以及多个操作数构成。表达式必须返回计算结果,计算结果或为值或为布尔值。
3、运算符对参与的操作数进行运算,根据参与运算的操作数的个数可把运算符分为单目运算符、双目运算符和三目运算符。当一个表达式包含多个运算符时,就需要考虑运算符的优先级,优先级高的运算符先参与运算,优先级低的运算符后参与运算。在实际的开发中,不需要特别去记忆运算符的优先级别,也不要刻意的使用运算符的优先级别,对于不清楚优先级的地方使用小括号辅助进行优先级管理。
■ 思考与练习
1、常量和变量有什么不同?
2、表达式中的数值是常量吗?
3、算术表达式返回的计算结果是数值还是布尔值?
4、a>b属于什么类型的表达式?其返回结果是数值还是布尔值?
5、假设变量a的值为5,执行a+=10操作后,变量a的值是多少?
6、请给出表达式a+=b*2的执行顺序。