Java中的运算符
(一) 算术运算符
算术运算符可分为:
双目运算符: ‘ + ’ , ‘ - ’ , ‘ * ’ , ‘ / ’ ,‘ % ’ .
单目运算符: ’ ++ ’ , ’ - - '.
首先,双目运算符中:
加减乘除这太简单了8,就不多说了,
最后一个‘%’读作“模”,表示取余数,例如:4%3 = 1,15%4 = 3.
它和除号“ / ”的使用方式比较特殊。
用不同的的方式计算5除以2,观察他们的结果:
public static void main(String[] args) {
//用不同的方式计算5/2
System.out.println(5/2); //正常计算,但由于初始给定的值为int,所以计算结果也会默认为int。
System.out.println(5.0/2); //当参与的运算数中含有float,那么结果将会默认为float。
System.out.println((float)5/2); //将5强转为float后再除以2
System.out.println((float)(5/2)); //将5/2的结果进行强转为float
System.out.println(10%3); //正常求余数,结果为1.
System.out.println(-10%3); //输出值为:-1
System.out.println(10%-3); //输出值为:1
System.out.println(-10%-3); //输出值为:-1
System.out.println(5/0); //报错,0不能再除数位置
}
运行结果如下:
单目运算符中:
“++”是自增运算符,例如:num++ 等同于:num + 1;
“- - ”是自减运算符,例如:num- - 等同于:num - 1;
自增和自减运算符在使用时会涉及到一个前置自增和后置自增(自减同理)的区分。
前置自增:num++
后置自增:++num
public static void main(String[] args) {
int a = 10;
int b = ++a; //a = a + 1; b = a;
System.out.println(b); //前置自增返回值是自增之后的值
int c = a++; //c = a; a = a + 1
System.out.println(c); //后置自增返回值是自增之前的值
//注意有坑!!!!
int i = 10;
i = i++;
System.out.println(i); //输出的结果是:10
}
结果:
这里为什么i = i++;的结果是10,并没有发生自增的操作呢?
这是因为java内部编译器的原因,通俗一点来解释:
我们可以把i++拆分成两个步骤:
(1)
t = i++;
i = t;
但是,其中的t = i++;又可以拆分成:
t = i;
i++;
因为啊,后置++是先返回值,然后再进行++,所以这里赋值给 t 的还是 i 的初始值10;
(二)复合运算符
复合运算符:+= 、 -= 、 *= 、 /= .
用法:x += y;
表示的含义是,将 x+y 的值再重新赋值给x,-= 、 *=、/=同理
public static void main(String[] args) {
int a = 10;
int b = 20;
a += b;
System.out.println(a); //-= *= /= 同理。
}
结果:
(三)关系运算符
关系运算符:==、!=、<、>、<=、>=.
其中:
(1)==:判断两侧的值是否相等,相等返回true,否则返回false.
(2)!= :判断两侧值是否不相等,不等返回true,否则返回false.
(3) < :判断左侧值是否小于右侧的值,满足返回true,否则返回false.
(4) > :判断左侧值是否大于右侧的值,满足返回true,否则返回false.
(5)<=:判断左侧值是否小于或者等于右侧的值,满足返回true,否则返回false.
(6)>=:判断左侧值是否大于或者等于右侧的值,满足返回true,否则返回false.
关系运算符的返回结果都是boolean类型的,值只有true or false
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println(a==b);
System.out.println(a!=b);
System.out.println(a<b);
System.out.println(a>b);
System.out.println(a<=b);
System.out.println(a>=b);
//上面这些输出结果都是true或者false
}
结果:
(四)逻辑运算符
逻辑运算符:&& 、|| 、 !
逻辑运算符们的返回结果也是boolean类型,其值为:true or false
(1)逻辑与:&&
表达式1 && 表达式2 ; 当表达式1为假或者表达式2为假时,返回false,只要有一个为假,逻辑与就返回false,当左右两边两个表达式都为真(true)时,逻辑与才返回true,
(2)逻辑或:||
表达式1 || 表达式2 ; 当表达式1为真或者表达式2为真时,返回true,只要有一个为真,逻辑或就返回true,当左右两边两个表达式都为假(false)时,逻辑或才返回false,
逻辑与 和 逻辑或都遵循短路求值原则,即:
1、对于逻辑与:一旦表达式1为真,就没有必要判断表达式2了,肯定返回false,
2、对于逻辑或:一旦表达式1为假,就没有必要判断表达式2了,肯定返回true.
(3)逻辑非:!
! 表达式;返回的是与表达式所表示的布尔类型值相反,如果表达式判定为true,那么逻辑非返回false,如果表达式判定为false,那么逻辑非返回true.
public static void main(String[] args) {
int a = 10;
int b = 20;
int c = 30;
System.out.println(a < b && b < c); //逻辑与,两真才为真
System.out.println(a < b || b > c); //逻辑或,有真就为真
//短路求值规则
System.out.println(10 > 20 && 10 / 0 == 0 ); //原本应该报算术异常,但由于表达式1已经为假,所以没有判断表达式2,所以就不会报错了
//^按位异或(不一样的,进行或,一样的就是0)
//~按位取反(将二进制按位取反)
boolean flg = true;
System.out.println(!flg); //java中!运算符只能作用于boolean类型上
System.out.println(!(a < b));
}
output:
(五)条件运算符
条件运算符:…? … :…
条件运算符是一个三目运算符,
表达式1?表达式2:表达式3; 他所表示的含义是,判断表达式1的值,如果为真,则返回表达式2,如果为假,则返回表达式3.
public static void main(String[] args) {
int a = 10;
int b = 20;
int max = a > b ? a : b; //判断a大于b吗?大于返回a的值,否则返回b的值,该方法可用于求两个数的最大值。
System.out.println(max);
}
output: