- 1、本文档共10页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
运算符表达式和语句
第3章 运算符、表达式和语句
3.1 运算符与表达式
Java的运算符与C/C++的运算符几乎一致,且含义与C几乎一致。
1、算术运算符与算术表达式
有:+、-、*、/、%
且与C一样,/具有整数除以整数得到整数的规定:
如:
int a=5,b=2;
double c=a/b; //因为a和b都是整数,所以结果c得到2,而不是2.5
且%也是取余的运算,与C一样,要求%的被除数与除数均是整数,结果的符号也是与被除数一致。
2、自增、自减运算符:++、--
与C一样:
i++
++i
的区别仍然在于i++是先使用i的值,再让i自己加1,而++i是先让i加1,再使用i的值。
3、混合运算
如果在一运算表达式中,含有多种数据类型,那么Java的规则与C也一样,基本上是按照从数据的空间从小到大进行自动转换,过程一般为:
byte-short-int-long-float-double
且参加运算中只要有一个double,那么,结果一定是double类型。
所以,如在上面的除法运算中,如果想要得到2.5,可以使用强制类型转换。
强制类型转换与C中的使用与语法也是一样的:
int a=5,b=2;
double c=a*1.0/b;//可使用的方法:c=(double)a/b;或c=a/(double)b;
另外,与C一样,在Java中,char型数据也能与int型数据一样参加运算, 如:
char ch=X;
int n=35;
n=n+ch; //正确,其中ch的值就取X在Unicode中的代码,当然它是英文字母,与ASCII是一致的。
4、关系运算符与关系表达式
关系运算符有:、、=、=、==、!=,这与C完全一致
且它们的优先级也与C一致:
、、=、=优先级相同
==、!=优先级相同
且、、=、=的优先级大于==、!=的优先级。
如:
int a=5,b=-3,c=7;
if( ab==b=c )
ab==b=c理解为(ab)==(b=c),且ab得到true,b=c也得到true,所以两者是==的,所以整个表达式的结果为true。
5、逻辑运算符与逻辑表达式
与C中一样,逻辑运算符有:、||、!
其中一般为And,||一般读为Or、!一般读为Not
注意:它们要求参加逻辑运算的两个数都必须是boolean型,而不得是别的类型,这一点上与C是不一样的。如:
在C中:
int a=5,b=-3,c=7;
if(a b || c)
显然,参加运算的两个数都是int型,是正确???,在C中其实就是用非0代表真,用0代表假,显然上面的结果是判断ab是a和b均是非0可得到结果1
如果在Java中,上面的写法是错误的,因为和||要求必须是boolean型,可以改为等价的:
if(a!=0 b!=0 || c!=0 )
且、||和!还有优先级的问题:
!的优先级大于,大于||
所以if(a!=0 || b!=0 c!=0 )相当于:if(a!=0 || (b!=0 c!=0) )
下面是、||和!的真值表:
操作数Opt1操作数Opt2Opt1 Opt2Opt1 || Opt2!Opt1truetruetruetruefalsetruefalsefalsetruefalsefalsetruefalsetruetruefalsefalsefalsefalsetrue观察上面的真值表,可以发现一个问题:
对于Opt1 Opt2来说,如果想要结果为true,必须是Opt1和Opt2均是true,只要有一个是false,那么,结果就是false,显然,假设已经发现Opt1是false,那么其实不管Opt2是true还是false,结果一定是false。换句话说,既然已经知道Opt1是false,那么,不用看Opt2也知道结果一定是false,也就不需要去看Opt2。
为了节省时间,在C和Java中都采取了这种所谓的“短路规则”。就是对于Opt1 Opt2来说,如果已经计算得到Opt1是false,那么根本不会去计算Opt2,这样,Opt1的计算就将Opt2给短路了。
如:
int a=5,b=-3,c=7;
if( (a++)1 (b++)0 )
true true
这样,a++和b++都进行了计算,从而a=6,b=-2
但是,如果:
if( (a++)1 (b++)0 )
false
由于已经得到前面的一部分为false,所以,后面的根本不会去计算,从而(b++)0不会计算,也就是b++不会被执行,从而结果a=6,但是b还是-3,这就是短路。
类似的||也有短路:由于参加运算的Opt1 || Opt2的结果,如果Opt1已经是true,那
文档评论(0)