运算符(operator)
算术运算符
1.+,-,*,/,%属于二元运算符。%是取模运算符,就是我们常说的求余数操作。
2.算术运算符中++(自增),--(自减)属于一元运算符。
二元运算符的运算规则:
整数运算:
如果两个操作数有一个为long, 则结果也为long。
没有long时,结果为int。即使操作数全为short,byte,结果也是int。
浮点运算:
如果两个操作数有一个为double,则结果为double。
只有两个操作数都是float,则结果才为float。
取模运算:
其操作数可以为浮点数,一般使用整数,结果是“余数”,“余数”符号和左边操作数相同,如:7%3=1,-7%3=-1,7%-3=1。
赋值及其扩展赋值运算符
关系运算符
关系运算符用来进行比较运算。关系运算的结果是布尔值:true/false;
=是赋值运算符,而真正的判断两个操作数是否相等的运算符是==。
==、!= 是所有(基本和引用)数据类型都可以使用。
>、>=、<、<= 仅针对数值类型(byte/short/int/long,float/double 以及char)。
逻辑运算符
逻辑运算的操作数和运算结果都是boolean值。
短路与和短路或采用短路的方式。从左到右计算,如果只通过运算符左边的操作数就能够确定该逻辑表达式的值,则不会继续计算运算符右边的操作数,提高效率。
boolean b3 = 1>2&(4<3/0); //会报错 无法执行
位运算符
&和|既是逻辑运算符,也是位运算符。如果两侧操作数都是boolean类型,就作为逻辑运算符。如果两侧的操作数是整数类型,就是位运算符。
不要把“^”当做数学运算“乘方”,是“位的异或”操作。
/**
*测试逻辑位运算符的用法
*/
public class TestOperator05{
public static void main(String[] args){
int a = 7;
int b = 8;
System.out.println(a&b);//结果0
System.out.println(a|b);//结果15
System.out.println(a^b);//结果//15
System.out.println(~b);//结果-9
//移位
//乘以2,除以2,使用移位操作最快!!!
int c = 5<<1; //5*2
System.out.println(c);
System.out.println(40>>3);//相当于40/8
}
}
字符串连接符
“+”运算符两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转换为字符串然后再进行连接。
/**
*测试字符串连接符的用法
*/
public class TestOperator0{
public static void main(String[] args){
String a = "3";
int b = 4;
System.out.println(a+b);
//条件是String,不是char 若不是则仍然是加法
char c1 = 'h';
char c2 = 'i';
System.out.println(c1+c2);
System.out.println(""+c1+c2);//通过加字符串,让整个符号都变成连接符
}
}
条件运算符 运算符优先级的问题
x 为boolean 类型表达式,先计算x 的值,若为true,则整个运算的结果为表达式y 的值,否则整个运算结果为表达式z的值。
不需要去刻意的记这些优先级,表达式里面优先使用小括号来组织!!
逻辑与、逻辑或、逻辑非的优先级一定要熟悉!(逻辑非>逻辑与>逻辑或)。如:
a||b&&c的运算结果是:a||(b&&c),而不是(a||b)&&c
/**
*测试条件(三元)链接符· 优先级问题用法
*/
public class TestOperator06a{
public static void main(String[] args){
int score = 90;
String a = score < 60?"不及格":"及格";
System.out.println(a);
if(score<60){
a = "不及格";
}else{
a = "及格";
}
int x = -100;
int flag =x > 0 ? 1 : (x == 0 ? 0 : -1);
System.out.println(flag);//结果-1
//优先级问题用法
boolean s1=true,s2=true,s3=false;
System.out.println(s1||s2&&s3);//逻辑运算符:非>与>或
//建议使用小括号住址表达式
boolean s4 =(3>1||4>3)&&(3<5);
System.out.println(s4);
}
}