应用程序设计第四章运算符、表达式和流程控制张张利利国国中科院新科海学校中科院新科海学校v512v512工作室工作室2JavaSEJavaSE应用程序设计应用程序设计新科海学校新科海学校运算符算术运算符:+,―,*,/,%,++,――关系运算符:,,=,=,==,!=布尔逻辑运算符:!,&,|,^,&&,||位运算符:&,|,^,~,,,赋值运算符:=扩展赋值运算符:+=,―=,*=,/=字符串连接运算符:+条件运算符:?:4JavaSEJavaSE应用程序设计应用程序设计新科海学校新科海学校逻辑运算符逻辑运算符功能!--逻辑非&--逻辑与|--逻辑或^--逻辑异或&&--短路与||--短路或逻辑运算符功能说明:ab!aa&ba|ba^ba&&ba||btruetruefalsefalsetruetruefalsetruefalsefalsetruefalsetruefalsetruefalsefalsetruetruefalsefalsetruetruefalsetruefalsefalsefalsetruetruetruefalse5JavaSEJavaSE应用程序设计应用程序设计新科海学校新科海学校{publicstaticvoidmain(Stringargs[]){booleana,b,c;a=true;b=false;c=a&b;System.out.println(c);c=a|b;System.out.println(c);c=a^b;System.out.println(c);c=!a;System.out.println(c);c=a&&b;System.out.println(c);c=a||b;System.out.println(c);}}6JavaSEJavaSE应用程序设计应用程序设计新科海学校新科海学校短路逻辑运算符使用短路逻辑运算符&&和||可实现“短路”的“与”和“或”运算的功能——当根据第一个操作数的值已经能够确定整个表达式的结果时,将跳过对第二个操作数值的评估,直接得出昀终结果。publicvoidm1(intn){if(n0||n31){System.out.println(非法赋值);}}7JavaSEJavaSE应用程序设计应用程序设计新科海学校新科海学校{publicintday,month,year;publicMyDate(intd,intm,inty){day=d;month=m;year=y;}}publicclassTest{publicstaticvoidmain(Stringargs[]){MyDatem=null;m=newMyDate(38,6,2002);if((m!=null)&&(m.day0)&&(m.day31)){System.out.println(日期合法);}}}8JavaSEJavaSE应用程序设计应用程序设计新科海学校新科海学校位运算符位运算符功能~--取反&--按位与|--按位或^--按位异或位运算符功能说明:01001111~1011000001101101&010010011100101101101101|111011111100101101101101^10100110110010119JavaSEJavaSE应用程序设计应用程序设计新科海学校新科海学校整数二进制表示Java语言二进制数采用补码形式表示,数正负区分标志:符号位正数进制转换¾十进制----二进制:除2取余、除尽为止¾二进制----十进制:累加求和负数进制转换¾十进制到二进制:1.取绝对值2.转换为二进制3.逐位取反4.加1¾二进制到十进制:1.减12.逐位取反3.转换为十进制正数4.乘-110JavaSEJavaSE应用程序设计应用程序设计新科海学校新科海学校{publicstaticvoidmain(Stringargs[]){inta=9&12;intb=9|12;intc=9^12;intd=~12;System.out.println(a);System.out.println(b);System.out.println(c);System.out.println(d);}}输出结果:8135-1311JavaSEJavaSE应用程序设计应用程序设计新科海学校新科海学校移位运算符移位运算符用于对整型数据的二进制位进行移位处理。左移ab;将二进制形式的a逐位左移b位,昀低位(右侧)空出的b位补0,原来昀左侧的b位被丢弃。带符号右移ab;将二进制形式的a逐位右移b位,昀高位(左侧)空出的b位补原来的符号位;无符号右移ab;将二进制形式的a逐位右移b位,昀高位空出的b位补0。12JavaSEJavaSE应用程序设计应用程序设计新科海学校新科海学校=0000000000000000000010001011001122273=22273=22273=-2227=-22273=11111111111111111011101001101000-22273=11111111111111111111111011101001-22273=000111111111111111111110111010010000000000000000010001011001100000000000000000000000000100010110000000000000000000000001000101101111111111111111111101110100110113JavaSEJavaSE应用程序设计应用程序设计新科海学校新科海学校移位运算符性质适用数据类型:byte、short、char、int、long,对低于int型的操作数将先自动转换为int型,再进行移位。对于int型整数移位ab,系统先将b对32取模,得到的结果才是真正移位的位数。对于long型整数移位时ab,则是先将移位位数b对64取模。14JavaSEJavaSE应用程序设计应用程序设计新科海学校新科海学校{publicstaticvoidmain(Stringargs[]){inta=10;intj=a3;intk=a3;intm=a32;System.out.println(j=+j);System.out.println(k=+k);System.out.println(m=+m);}}输出结果:j=1k=80m=1015JavaSEJavaSE应用程序设计应用程序设计新科海学校新科海学校赋值运算符=将等号右侧表达式的计算结果赋给等号左侧的变量。赋值操作时遵循值传递原则。=左侧必须是一个已经声明过的变量,而不允许是常量或复合表达式,例如:赋值运算符左右两侧的数据类型应保持一致,可以自动进行类型转换的情况除外。inti=5,j=6;//合法j=i+10;//合法10=i+j;//非法i+j=10;//非法16JavaSEJavaSE应用程序设计应用程序设计新科海学校新科海学校扩展赋值运算符将赋值运算符和其他的运算符结合起来可以组成扩展赋值运算符,以实现简化的运算标记效果。运算符使用格式功能说明+=a+=ba-=ba*=ba/=b%=a%=ba=a%b&=a&=ba=a&b|=a|=ba=a|b^=a^=ba=a^b=a=ba=ab=a=ba=ab=a=ba=aba=a+b-=a=a-b*=a=a*b/=a=a/b17JavaSEJavaSE应用程序设计应用程序设计新科海学校新科海学校条件运算符?:语法格式:说明:其中表达式1必须为boolean类型,系统将首先计算表达式1的值,当其值为true时,则将表达式2的值作为整个表达式的昀终结果,否则将表达式3的值作为整个表达式的昀终结果举例:intscore=50;intresult=score60?60:score;Stringtype=score60?不及格:及格;表达式1?表达式2:表达式318JavaSEJavaSE应用程序设计应用程序设计新科海学校新科海学校自增/自减运算符++/--也称增量/减量运算符,用于对单个变量进行增1和减1操作。可以单独使用,也可用于复合表达式中;运算符可以位于变量之前,也可用于变量之后:¾位于变量前面时,先进行变量的增量/减量运算,然后再取用变量的值计算整个表达式的结果;¾位于变量后面时,先取用变量的值计算整个表达式的结果,然后才进行增量/减量运算。inti=5;intj;i++;//等价于i=i+1;或++i;j=++i;//等价于i=i+1;j=i;j=i++;//等价于j=i;i=i+1;j=4*i--;//等价于j=4*i;i=i-1;19JavaSEJavaSE应用程序设计应用程序设计新科海学校新科海学校字符串连接运算符++除用于算术加法运算外,还可用于对字符串进行连接操作。+运算符两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转换为字符串然后再进行连接。inti=300+5;Strings=hello,+i+号;System.out.println(s);inti=300+5;Strings=hello,+world!;输出结果:hello,305号20JavaSEJavaSE应用程序设计应用程序设计新科海学校新科海学校表达式表达式是符合一定语法规则的运算符和操作数的序列。表达式的类型和值¾对表达式中操作数进行运算得到的结果称为表达式的值¾表达式的值的数据类型即为表达式的类型表达式的运算顺序¾首先应按照运算符的优先级从高到低的顺序进行¾优先级相同的运算符按照事先约定的结合方向进行a5.0+a(a-b)*c-4Strings1=3+5+hello;System.out.println(s1);Strings2=hello+3+5;System.out.println(s2);输出结果:8hellohello3521JavaSEJavaSE应用程序设计应用程序设计新科海学校新科海学校运算符优先级/结合方向结合方向Java运算符从左向右[]().(方法调用)++--+(单目运算)-(单目运算)~!(强制类型转换)ne