第5章 Java的表达式

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

赋值号的左边只能是单个变量,不能是表达式,如 a=2+b+=3非法
练习六
设int a=3, 求a%=2*5-3+6的值是?

上式相当于a=a%(2*5-3+6) a=a%13 a 的值是3请问表达式 a=a%2*-3+6 的值是?

a=a%2*5-3+6 a=1*5-3+6 a=2+6

<变量> <赋值运算符> <表达式>

若是精度高的表达式值赋给精度低的变量,必须手支进行显 式类型转换;反之,可由系统自动进行隐式类型转换


赋值运算符的优先级低于前述各类运算符
赋值运算符的结合性都是从右到左
5.5 赋值运算

例: 已知int a=2,b=1; 求表达式a-=b+=2;的值? 赋值运算结合性是从右到左, 上式等价于 b=b+2; a=a-b;

功能:对数的二进制位进行逻辑运算 运算符:>>, <<, >>> >>,<<,>>>是双目运算符 运算对象和运算结果都是整型数 格式:

<整型数据> <位移运算符> <整型数据>


优先级:低于算术运算符,高于比较运算符 结合性: >>,<<,>>>都是从左到右
练习八
求7>>1,7<<1和 ~7的值?
条件运算符 ? :




功能:通过判断条件表达式值的真假,决定条件运算表达式的值是 取表达式1的值还是表达式2的值 ? :是三目运算符 运算对象中,条件表达式必须是逻辑型数据,表达式1和表达式2 必须是相互兼容的数据类型 运算结果的数据类型取决于表达式1和表达式2的数据类型 格式: <条件表达式> ? <表达式1> : <表达式2> 说明: 若条件表达式值为true,取表达式1的值为条件表达式的值 若条件表达式值为false,取表达式2的值为条件表达式的值 优先级:仅高于赋值运算符的次低级运算符 结合性: ? :从左到右

设byte x=7;
则char ch=„B‟+x类型是? int型 char ch=…初始值写法? (char)(’B’+x);
5.2 比较运算
功能:比较两个数的大小 运算符:>
,< ,>=, <=; = =, ! = 比较运算符都是双目运算符 两个运算对象的数据类型须是相同或相互兼容 运算结果类型总是逻辑型 格式:<与右侧兼容的数据> <比较运算符><与左侧兼容的数据> > ,< ,>=, <= 运算优先级比= =, ! = 高一级 所有比较运算符的结合性都是从左到右 注意事项:不能比较两个浮点数是否相等
5.4 递加、递减运算

功能:进行算术运算 运算符:++,- ++,- -是双目运算符 运算对象和运算结果的数据类型都是数值型 格式:

<递加、递减运算符> <数值型数据> 或 <数值型数据> <递加、递减运算符> 前递(左递)运算符++,- -优先级高于后递(右递)运算符++,- -

例:

5.1 算术运算


功能:进行算术运算 运算符: (); +,-; *, / ,% ; +,();+,- 是单目运算符,*,/,%;+,-是双目运算符 运算对象和运算结果都是数值类型(整型数,浮点数,字符型数)
格式:[<数值型数据>] <算术运算符><数值型数据>

上述运算符是按运算优先级的顺序排列 除++,- -的结合性是从右到左外,其他运算符的结合性都是 从左到右






7>>1 将0000111右移一位,高位补符号 位 0000011 ∴ 7>>1的值是 3 7<<1 将0000111左移一位,低位补0 0001110 ∴ 7<<1的值是 14 ~7 将0000111逐位求反 1111000 ∴ ~7的值是 -8
练习九
设int a=10,b=5,则a++>10 & - -b<5
运算后,变量a,b的值是?




Java中逻辑型数据在内存中仅占一个二制位,所以 可以用位运算符&和 | 进行运算 运算结果是逻辑型 运算符&和 | ,不循逻辑运算符的“短路运算规则” a++>10 & - -b<5 10>10 & 4<5 false & true false 变量a的值是11 ,变量b的值是4
练习四
设int a=10,b=5,则对a++>10 | | - -b<5 运算后,变量a,b的值是?

上式相当于(a++>10) | |( - -b<5)


∵ (a++>10) 10>10 false
∴ 要继续求( - -b<5)的值,
( - -b<5) 4<5
∴经过运算后,a的值是11,b的值是4

右递减 y=x- -等价
y=x x=x-1
//变量值x的值是? 5
4 //表达式x- -的值是?

System.out.println(“x=”+x+” y=”+y); x=4 y=5
5.5 赋值运算

功能:将表达式的值赋予变量 运算符:= ; ?= ( ?代表+,-,*,/,%,&,|,^,>>,<<,>>>中任一个) 都是双目运算符 变量和表达式的数据类型必须是相同或相互兼容的 格式:
练习七
求7^5,7&5和 7 | 5的值?




7^5 0111^0101 0010(首位为符 号位) ∴ 7^5的值是 2 7&5 0111&0101 0101 ∴ 7&5的值是 5 7 | 5 0111 | 0101 0111 ∴ 7 | 5的值是 7
5.7 位移运算
条件运算符 ? :

例:

int x=5,y=8,z=2; int k=x<3 ? y : z; //k的值为2
运算符 instanceof
功能:判断左侧的对象是否属于右侧类或其子类
instanceof是双目运算符 运算对象只能是引用数据类型,不能是基本数据类型 运算结果是逻辑型数据 格式:<对象变量名> instanceof <类名> 优先级:与比较运算符<,<=,>,>=同级 结合性:从左到右 注意事项: 要求对象数据类型和类数据类型不能是编译不兼容类型,否则无法 通过编译。 例 String str=“a”; str instanceof Float; 无法通过编译 Object str=“a”; str instanceof Float; 可以通过编译。因为类数据类 型Float是对象数据类型Object的子类(相互兼容数据类型)
5.1 算术运算

注意事项 运算符+还可用于字符串连接运算 例如 “abc”+”XYZ” 结果为”abcXYZ” 运算符%的运算对象还可是实数类型 例如 37.2%10 结果为7.2
练习一

5/2值是?

5.0/2值是?
5%2值是? 12.5%5值是?
2
2.5

1
2.5
赋值运算:= ;?= ( ?代表+,-,*,/,%,&,|,^,>>,<<,>>>中任一个)
位运算运算:~ ; &; ^; | ; 位移运算运算:>>,<<,>>>
其他运算:?:, instanceof, new
对运算符应掌握内容



功能(所表示的运算) 运算对象的类型和个数 运算结果的类型 格式 运算符优先级 运算符结合性 注意事项 int a=10,b=5; a/(-4)+b×8%7

前递(左递)运算符的运算结合性是从左到右,后递(右递)运 算符++,- - 的运算结合性是从右到左
5.4 递加、递减运算


递加运算种类: 左递加:先将变量值加一,再求表达式的值 右递加:先求表达式的值,再将变量值加一 例: 设int x=5,y; x=x+1 //表达式++x的值是? 6 左递加y=++x等价 y=x //变量值x的值是? 6
练习三
设int a=10,b=5,则对a++>10 && - -b<5
运算后,变量a,b的值是?

上式相当于(a++>10) &&( - -b<5) ∵ (a++>10) 10>10 false ∴表达式(a++>10) &&( - -b<5)值总是false 按“短路运算规则”,不再计算( - -b<5) ∴经过运算后,a的值是11,b的值仍是5
a的值是 8
5.6 位运算

功能:对数的二进制位进行逻辑运算 运算符:~ ; &; ^; | ; ~是单目运算符;&, ^, | 是双目运算符 运算对象和运算结果都是整型数 格式:


[<整型数据>] <位运算符> <整型数据>
优先级:按上述列示顺序

结合性:~是从右到左;^,&,|是从左到右

右递加y=x++等价
y=x
//变量值x的值是 ? 5

x=x+1 //表达式x++的值是? 6 System.out.println(“x=”+x+” y=”+y); x=6 y=5
练习五


递减运算种类: 左递减:先将变量值减一,再求表达式的值 右递减:先求表达式的值,再将变量值减一 例: 设int x=5,y; 4 x=x-1 //表达式- -x的值是? 左递减 y= - -x等价 4 y=x //变量值x的值是?
练习二
表达式

1>2= =3<4
的值是 ?
上式相当于 (1>2)==(3<4) false==true false
5.3 逻辑运算

功能:进行逻辑运算 运算符:! ; & ,^, | ; && , | | ; ! 是单目运算符, &,^, |, &&, | | 是双目运算符 运算对象和运算结果的数据类型都是逻辑型 格式:[<逻辑型数据>] <逻辑运算符> <逻辑型数据> 上述运算符是按运算优先级的顺序排列 !的运算结合性是从右到左,&,^, | , &&, | |的运算结合性是 从左到右

运算符 instanceof

例: String str=“Abc”; str instanceof String 的值是 true Object f=1.0f ; f instanceof Double 的值是 false
运算符 new




功能:创建对象实例 new是单目运算符 运算对象只能是引用数据类型,一般是引用类型的构造方法 运算结果是与运算对象相同的引用数据类型或其超类 格式:new <类构造方法> 优先级:低于单目运算符,高于算术运算符 结合性:从左到右 注意事项: 类的构造方法格式通常为 <类名>([<参数表>]),所以new的格式也 可表示为 new <类名>([<参数表>]) 例:

&&,| | 要遵循逻辑运算的“短路运算规则”, & ,^, |则不然
5.3 逻辑运算

注意事项:


运算符&,^, |的运算对象数据类型除了逻辑型外,还 可以是整数类型(进行整数位运算) 而运算符!,&& , | |的运算对象数据类型只有逻辑型, 没有整数类型。且&&,| | 要遵循逻辑运算的“短路 运算规则”

Sring str=new String(“Abc”);
5.8 优先级和结合性

运算符整体的优先级请看教材p59

单目运算符优先级是最高和次高 赋值运算符优先级是最低 可概括为:单目 算术 比较 逻辑 赋值 除单目运算符、赋值运算符的结合性是从右到左 其余的运算符结合性都是从左到右
Java的表达式
《Java SE6全方位学习 》 第5章
学习目标

Java基本表达式的使用 操作符的使用与优先级 学习时间:3小时

主要内容




5.1 算术运算 5.2 比较运算 5.3 逻辑运算 5.4 递加、递减运算 5.5 赋值运算 5.6 位运算 5.7 位移运算 5.8 优先级和结合性 5.9 本章总结
运算符和表达式

运算符:表示实施某种运算的符号 表达式:用运算符将数据连接成有意义的式子 表达式的核心是运算符 Java中提供了八大类约30种运算符
算术运算: (); +,-; *, / ,% ; +,比较运算: > ,< ,>=, <=; = =, ! = 逻辑运算: ! ; & ,^, | ; && , | | ; 递加、递减运算: ++,- -
相关文档
最新文档