运算符
操作数:运算符左右两边的数据
表达式:运算符及其左右的操作数组成的整体 例如:a+b
语句:“;”是一个语句的结束
1.1算术运算符
+ - * / % ++ --
+:加号
1)正号
2)加法运算符
3)连接符
++、--:自增与自减
只影响操作数本身,不影响其他结果
使用:
1)先调用,再自增或自减。操作数在运算符之前
a++
2)先自增或自减,再参与运算。操作数在运算符之后
++a
int a = 1;
int b = a++ + 1;//b=2,a=2
int b1 = ++a + 1;//b1=3,a=2
1.2赋值运算符
= 是基本的赋值运算符,唯一自右向左的运算符。
扩展赋值运算符:
+= -= *= /=
a +=1; -->a = a+1;
优点:1.提高执行效率
2.自动强制转换类型
缺点:不直观
注意 : 编译期间编译器会自动把代码适当优化成扩展赋值运算符的写法,推荐使用扩展赋值运算符
public class Test01 {
public static void main(String[] args) {
int a = 2;
int b = 4;
b += 1; //b = b+1
System.out.println("a="+a);
System.out.println("b="+b);
//分隔
System.out.println("----------------------");
//+与整数连接时作为运算符,+与字符串连接时作为连接符,运算顺序从左至右
System.out.println("hello");
System.out.println('a'+1+"hello");//97 + 1 + "hello"
System.out.println("hello"+'a'+1);//"hello" + a + 1
}
}
1.3逻辑运算符
操作数只能为boolean类型(值,值为boolean结果的表达式)
& 与 一个为false,结果为false;两个都为true,结果为true
| 或 一个为true,结果为true;两个都为false,结果为false
! 非 取反
^ 异或 相同为false,不同为true
短路运算符:如果运算符左边为true,则右边不执行。
&& 一个为false,结果为false;两个都为true,结果为true
|| 一个为true,结果为true;两个都为false,结果才为false
注意:推荐使用短路运算符
public static void main(String[] args) {
//&运算
System.out.println(true&true);//true
System.out.println(true&false);//false
System.out.println(false&true);//false
System.out.println(false&false);//false
System.out.println("-----------------------");
//|运算
System.out.println(true|true);//true
System.out.println(true|false);//true
System.out.println(false|true);//true
System.out.println(false|false);//false
System.out.println("-----------------------");
//!运算 取反
System.out.println(!true);//false
System.out.println(!false);//true
System.out.println("-----------------------");
//^运算 异或 相同为false ,不同为true
System.out.println(true^true);//false
System.out.println(true^false);//true
System.out.println(false^true);//true
System.out.println(false^false);//false
System.out.println("-----------------------");
//短路运算 && 一个为false结果为false,两个都为true,结果为true
System.out.println(true&&true);//true
System.out.println(true&&false);//false
System.out.println(false&&true);//false
System.out.println(false&&false);//false
System.out.println("-----------------------");
//||运算 一个为true,就是true,两个为false,结果才是false
System.out.println(true||true);//true
System.out.println(true||false);//true
System.out.println(false||true);//true
System.out.println(false||false);//false
System.out.println("-----------------------");
}
1.4条件运算符
语法:boolean表达式 ? 值1 :值2;
执行过程:1)先执行boolean表达式,得到结果
2)结果为true,取值1;为false,取值2
public static void main(String[] args){
int a = 3;
int b = 5;
int c = a > b ? a : b;
System.out.println(c);//取值2,结果为5
//比较三个数的大小,取最大值
int c1 = 8;
int max = a>b && a>c ? a : b>c1 ? b : c1;
System.out.println(max);
}
}
1.5关系运算符
> < >= <=
只能比较byte,short,int ,long ,float,double,char
== !=
可以比较任意类型数据
结果都为boolean的值,true代表正,相等,满足,false,不满足,不相等,负
public class Test03 {
public static void main(String[] args){
System.out.println("张三"=="李四");//false
char ch = 'a';//ASCII中,a = 97
System.out.println(ch >= 'a');//true
System.out.println(ch <= 90);//false
}
}
1.6位运算符
运算时,先将十进制转换为二进制,再运算
& 对两个操作数同一位置的数据进行运算,都为1,才是1
| 对两个操作数同一位置的数据进行运算,有一个是1,结果为1
^ 对两个操作数同一位置的数据进行运算, 相同为0,不同为1
左移<< 左边的操作数向左移右边操作数个位数,空位补0 8<<2等价于8*2^2
右移>> 左边的操作数向右移右边操作数个位数,移出位置忽略,剩余为二进制结果 8>>2等价于8/2^2
注意 : 如果使用位移运算符比直接对2的次方做乘除效率高,推荐使用。
public static void main(String[] args) {
System.out.println(3&2); //2
System.out.println(3|2); //3
System.out.println(3^2); //1
System.out.println(8<<2); //32
System.out.println(8>>2); //2
System.out.println(9>>2); //2
}