2 运算符
2.1算数运算符
符号 | 说明 |
---|---|
+ | 加法 |
- | 减法 |
* | 乘法 |
/ | 除法(如果符号前后都是整数,结果取整数;如果有一位是小数,结果正常) |
% | 模(取余数) |
package week03;
public class SuanshuYunsuanfu {
public static void main(String[] args) {
int i=10;
int j=3;
float a=4.0F;//or float a=(float)4.0;
int add=j+i;//推荐使用
System.out.println("i+j="+add);
int sub=i-j;
System.out.println("i-j="+sub);
int mul=i*j;
System.out.println("i*j="+mul);
int div=i/j;
System.out.println("i/j="+div);
float x=i/a;
System.out.println("i/a="+x);
int mo=i%j;
System.out.println("i%j="+mo);
}
}
运行结果:
i+j=13
i-j=7
i*j=30
i/j=3
i/a=2.5
i%j=1
注意“+”遇到字符串结果任为字符串
package week03;
public class JiaChar {
public static void main(String[] args) {
int i =10;
int j=5;
String s="I love java";
String i_s=i+s;
System.out.println("i+s="+i_s);
System.out.println(i+j+"");
System.out.println(i+j+""+5);
System.out.println(i+""+j);
}
}
运行结果为:
i+s=10I love java
15
155
105
2.2自增自减运算符(属于算数运算符)
1、格式
变量++ ->后自加
++变量 ->前自加
变量-- ->后自减
–变量 ->前自减2、使用
1)、单独使用: ++ – 单独一句,没有和其他的语句使用时,自增和自减只变化1,不管符号在前还是在后都是先运算2)、混合使用:-- ++(和其他语句混合使用,例如:赋值语句,输出语句)
a、符号在前:先运算,再使用运算后的值
b、符号在后:先使用原值,使用完毕之后,自身再运算。
package week03;
public class SelfZengJian {
public static void main(String[] args) {
int i =15;
i++;
System.out.println("i="+i);
System.out.println("====================");
System.out.println("符号在前的情况如下:");
int j =10;
int jieguo=++j;
System.out.println("j="+j);
System.out.println("jieguo="+jieguo);
System.out.println("符号在后的情况如下:");
int z=50;
int jieguo01 = z++;
System.out.println("jieguo01="+jieguo01);
System.out.println("z="+z);
System.out.println("====================");
int b=80;
System.out.println(b++);
System.out.println(b);
System.out.println("更复杂的混合如下:");
int c=3;
int d=5;
int jieguo02=c++ + --d + ++c;
System.out.println("jieguo02="+jieguo02);
System.out.println(d);
}
}
运行结果如下:
i=16
符号在前的情况如下:
j=11
jieguo=11
符号在后的情况如下:
jieguo01=50z=51
80
81
更复杂的混合如下:
jieguo02=12
4
//特别例子
package week03;
public class deno {
public static void main(String[] args) {
int c=10;
c=c++;
System.out.println(c);
}
}
运行结果如下:
10
2.3 赋值运算符
1)、基本赋值运算符
= -->先看等号右边的,再将右边的数据赋值给等号左边的变量
2)、复合赋值运算符
+= -= *= /= %=
int i=10;
i+=2
i+=2 //为了方便计算,可以看成i=i+2,但是它们两个不能完全等价
package week03;
public class FuzhiYunsuanfu {
public static void main(String[] args) {
int i =5;
i+=5;
System.out.println(i);
}
}
//运行结果:10
package week03;
public class FuzhiYunsuanfu {
public static void main(String[] args) {
short i =5;
i=i+5; //改为i+=5就不会报错
System.out.println(i);
}
}
//报错:Exception in thread "main" java.lang.Error: Unresolved compilation problem:
//Type mismatch: cannot convert from int to short
//需要强制转为short类型,因为等号右边自动提升为int类型,需要手动强转,改为如下:
package week03;
public class FuzhiYunsuanfu {
public static void main(String[] args) {
short i =5;
i=(short)(i+5);
System.out.println(i);
}
}
注意:byte、short、float遇到复合赋值运算符,jvm自动转型
2.4关系运算符(比较运算符)
1)、结果:true或者false
2)、作用:作条件判断使用
符号 | 说明 |
---|---|
== | 如果符号前后的结果相等为true,否则为false |
> | 如果符号前的结果大于符号后的结果为true,否则为false |
< | 如果符号前的结果小于符号后的结果为true,否则为false |
>= | 如果符号前的结果大于或者等于符号后的结果为true,否则为false |
<= | 如果符号前的结果小于或者等于符号后的结果为true,否则为false |
!= | 如果符号前后的结果不相等为true,否则为false |
package week03;
public class CompareYuansuanfu {
public static void main(String[] args) {
int x=15;
int y=30;
boolean re=x==y;
System.out.println(re);//false
System.out.println(x>y);//false
System.out.println(x<y);//true
System.out.println(x>=y);//false
System.out.println(x<=y);//true
System.out.println(x!=y);//true
}
}
2.5逻辑运算符
作用:连接多个boolean类型的结果
符号 | 说明 |
---|---|
&&(与,并且) | 有假则假,符号前后有一个结果是假结果为false,整体为false,否则为真 |
||(或者) | 有真则真,符号前后有一个结果是假结果为true,整体为true,否则为假 |
!(非,取反) | 不是true,就是false,不是false,就是true |
^(异或) | 符号前后结果一样为false,不一样为true |
package week03;
public class LogicYunsuanfu {
public static void main(String[] args) {
int x=10;
int y=20;
int z=15;
System.out.println((x<y)&&(x==z));//false
System.out.println((x<y)||(x==z));//true
System.out.println((x<y)^(x==z));//true
System.out.println(!(x<y));//false
}
}
短路与和短路或的说明
符号 | 说明 |
---|---|
& | 如果符号前后都是布尔类型,有假则假,但是如果符号前为false,符号后的判断会继续执行 如果符号前后都是数字,相当于位运算符 |
&& | 双与,有假则假,但是有短路效果,如果符号前为false,符号后的判断就不会执行 |
| | 单或,如果符号前后都是布尔类型,有真则真,但是如果符号前为true,符号后的判断会继续执行 如果符号前后都是数字,相当于位运算符 |
|| | 双或,有真则真,但是有短路效果,如果符号前为true,符号后的判断就不会执行 |
//&
package week03;
public class DemoDuanlu {
public static void main(String[] args) {
int i =10;
int j=20;
boolean res=(++i>100)&(j-->10);
System.out.println(res);//false
System.out.println(i);//11
System.out.println(j);//19
}
}
//&&
package week03;
public class DemoDuanlu {
public static void main(String[] args) {
int i =10;
int j=20;
boolean res=(++i>100)&&(j-->10);
System.out.println(res);//false
System.out.println(i);//11
System.out.println(j);//20
}
2.6三元运算符
1、格式:
boolean 表达式?表达式1:表达式2
2、解释:
先判断表达式,如果是true,执行表达式1,否则执行表达式2
package week03;
public class ThreeYunsuanfu {
public static void main(String[] args) {
int grade=66;
int grade1=90;
int grade2=87;
int temp=grade>grade1?grade:grade1;
int max=temp>grade2?temp:grade2;
System.out.println(max);
}
}