1. 算数运算符:
代码示例:
package exercise.aritest; public class AriTest { public static void main(String[] args) { //除号 int num1 = 12; int num2 = 5; int result1 = num1 / num2; System.out.println(result1); int result2 = num1 / num2 * num2; System.out.println(result2); double result3 = num1 / num2; //此结果是讲整型运算结果赋值给double型变量 System.out.println(result3); double result4 = num1 / num2 + 0.0; double result5 = num1 / (num2 + 0.0);//除数已经是浮点型 double result6 = (double)num1 / num2; double result7 = (double)(num1 / num2); System.out.println(result4); System.out.println(result5); System.out.println(result6); System.out.println(result7); //取余运算 //结果的符号与被模数的符号相同 //开发中,经常使用%来判断能否被除尽的情况 int m1 = 12; int n1 = 5; System.out.println("m1 % n1 = " + m1 % n1); int m2 = -12; int n2 = 5; System.out.println("m2 % n2 = " + m2 % n2); int m3 = 12; int n3 = -5; System.out.println("m3 % n3 = " + m3 % n3); int m4 = -12; int n4 = -5; System.out.println("m4 % n4 = " + m4 % n4); //(前)++:先自增一,然后再运算。 //(后)++:先运算,然后再自增一。 int a1 = 10; int b1 = ++a1; System.out.println("a1 = " + a1 + ",b1 = " + b1); int a2 = 10; int b2 = a2++; System.out.println("a2 = " + a2 + ",b2 = " + b2); int a3 = 10; ++a3; //a3++ int b3 = a3; //注意点: short s1 = 10; //s1 = s1 + 1; //编译失败,这里不满足变量提升规则 s1 = (short)(s1 + 1);//正确的 System.out.println(s1); s1++; //自增一不会改变本身变量的数据类型,效率更高 System.out.println(s1); //如果是byte byte bb1 = 127; bb1++; System.out.println("bb1 = " + bb1); //(前)--:先自减一,后运算。 //(后)--:先运算,后自减一。 int a4 = 10; int b4 = --a4; System.out.println("a4 = " + a4 + ",b4 = " + b4); } }
2. 赋值运算符:
=
、+=
、-=
、*=
、/=
、%=
(两侧数据类型不一致的时候,可以使用自动类型转换或使用强制类型转换原则进行处理)如果开发中,希望变量实现+2操作,有几种方法?
方式一、
num = num + 2;
方式二、
num += 2;
(推荐)(同样如果实现+1(-1)操作可以使用自增(自减)运算符,这种方式更为推荐,但是不能使用连续自增(自减)运算去实现+2(-2)操作。)eg:
num++++
这种就是编译不通过的情况
编程实例:
package exercise.aritest; public class SetValueTest { public static void main(String[] args) { //赋值符号:= int i1 = 10; int j1 = 10; int i2,j2; //连续赋值 i2 = j2 = 10; int i3 = 10,j3 = 20; //中间的逗号表示两个变量都是int类型 //*********************** int num1 = 10; num1 += 2; //num1 = num1 + 2; System.out.println(num1); int num2 = 12; num2 %= 5; //num2 = num2 % 5; System.out.println(num2); short s1= 10; //s1 = s1 + 2;//编译不通过 s1 += 2; //这种写法不会改变变量本身的数据类型 System.out.println(s1); } }
3. 比较运算符(关系运算符):
true
,要没事false
。==
和赋值运算符中的=
之间的区别。代码实例:
package exercise.aritest; public class CompareTest { public static void main(String[] args) { int i = 10; int j = 20; System.out.println(i == j); //false System.out.println(i = j); //20//先将j赋值给i,然后再输出i boolean b1 = true; boolean b2 = false; System.out.println(b2 == b1);//false System.out.println(b2 = b1);//true } }
4. 逻辑运算符:
&
(逻辑与)、|
(逻辑或)、!
(逻辑非)、&&
(短路与)、||
(短路或)、^
(逻辑异或)boolean
类型的变量。代码示例:
package exercise.aritest; public class LogicTest { public static void main(String[] args) { //区分 & 和 && //相同点:& 和 && 的运算结果相同;当符号左边是true时,二者都会执行符号右边的运算 //不同点:当符号左边时false时,& 继续执行符号右边的运算,&& 不再执行符号右边的运算 boolean b1 = true; b1 = false; int num1 = 10; if(b1 & (num1++ > 0)) { System.out.println("我现在在北京"); }else { System.out.println("我现在在南京"); } System.out.println("num1 = " + num1); boolean b2 = true; b2 = false; int num2 = 10; if(b2 && (num2++ > 0)) {//短路与和逻辑与之间的区别就在于如果第一个判断为false,后面就不在判断,因为只有前后两个命题都为true的时候才会判断为true。 System.out.println("我现在在北京"); }else { System.out.println("我现在在南京"); } System.out.println("num2 = " + num2); //区分:| 和 || //相同点:| 和 || 的运算结果相同;当符号左边是false时,二者都会执行符号右边的运算 //不同点:当符号左边时true时,| 继续执行符号右边的运算,|| 不再执行符号右边的运算 boolean b3 = false; int num3 = 10; if(b3 | (num3++ > 0)) { System.out.println("我现在在北京"); }else { System.out.println("我现在在南京"); } System.out.println("num3 = " + num3); boolean b4 = false; int num4 = 10; if(b4 || (num4++ > 0)) { System.out.println("我现在在北京"); }else { System.out.println("我现在在南京"); } System.out.println("num4 = " + num4); } }
5. 位运算符: 位运算是直接对整数的二进制进行的运算。(这里的移位运算请见计算机组成原理)
注意:只有>>>,没有<<<
num1 = num1 ^ num2; num2 = num1 ^ num2; num1 = num1 ^ num2;
6. 三元运算符:
(条件表达式)?表达式1:表达式2;
如果条件表达式的值(结果为boolean
型变量)为true
,运算后的结果是表达式1;反之为表达式2。代码示例:
package exercise.aritest; public class SanYuanTest { public static void main(String[] args) { //获取两个整数的较大值。 int m = 12; int n =5; int max = (m > n) ? m : n; System.out.println(max); double num = (m > n) ? 2 : 1.0; //(m > n) ? 2 : "n大";//编译不通过 System.out.println(num); // ********************************* String maxStr = (m > n) ? "m大" : "n大"; String maxStr1 = (m > n) ? "m大" : ((m == n) ? "m和n相等" : "n大"); System.out.println(maxStr); System.out.println(maxStr1); //************************************* //获取三个数的最大值 int n1 = 12; int n2 = 30; int n3 = -43; int max1 = (n1 > n2) ? n1 : n2; int max2 = (max1 > n3) ? max1 : n3; System.out.println("三个数中的最大值为:" + max2); int max3 = (((n1 > n2) ? n1 : n2) > n3) ? ((n1 > n2) ? n1 : n2) : n3; System.out.println("三个数中的最大值为:" + max3); } }
凡是可以使用三元运算符的地方都可以改写为if-else
;反过来不一定可行
如果既可以使用三元运算符,又可以使用if-else
,优先使用if-else
7. 运算符的优先级:(自上而下,由高变低)