文档详情

3运算符、表达式和语句.doc

发布:2018-03-15约5.98千字共10页下载文档
文本预览下载声明
第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 操作数Opt2 Opt1 Opt2 Opt1 || Opt2 !Opt1 true true true true false true false false true false false true false true true false false false false true 观察上面的真值表,可以发现一个问题: 对于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,那么不
显示全部
相似文档