Java语言支持如下运算符:
二元运算符
package operator; public class Demo01 { public static void main(String[] args) { //二元运算符 int a = 10; int b = 20; int c = 25; int d = 30; System.out.println(a+b);//30 System.out.println(a-b);//-10 System.out.println(a*b);//200 System.out.println(a/b);//0,因为a和b都是int类型的,计算后是0.5,由于是int类型,所以最后结果取0 System.out.println(a/(double)b);//0.5,强制转换 } }
算术运算符
package operator; public class Demo02 { public static void main(String[] args) { long a = 1231212321213L; int b = 123; short c = 10; byte d = 8; double e = 10; int f = 122; System.out.println(a+b+c+d);//Long,有一个数为long,结果也为long System.out.println(b+c+d);//Int System.out.println(c+d);//Int System.out.println(a+b+e);//double,有double和long,结果为double,因为double的优先级比long高 //谁的优先级高,最终结果就转换为谁的 System.out.println(b%f);//输出1,%是取余数的意思,模运算 } }
关系运算符
package operator; public class Demo03 { public static void main(String[] args) { //关系运算符返回的结果:正确,错误 布尔值 int a = 10; int b = 20; System.out.println(a>b);//false System.out.println(a<b);//true System.out.println(a==b);//false System.out.println(a!=b);//true } }
自加、自减
package operator; public class Demo04 { public static void main(String[] args) { //++自加 --自减 一元运算符 int a = 3; int b = a++;//执行完这行代码后,先给b赋值,再自增 //a = a + 1 System.out.println(a);//4 // int c = ++a;//执行这行代码前,先给a自增,再赋值给c System.out.println(a);//5 System.out.println(b);//3 System.out.println(c);//5 //幂运算 2^3 2*2*2 = 8 double pow = Math.pow(2,3);//2的3次方 System.out.println(pow);//8 } }
逻辑运算
package operator; //逻辑运算符 public class Demo05 { public static void main(String[] args) { //&&与(and) ||或(or) !非(取反) boolean a = true; boolean b = false; System.out.println("a && b:"+(a && b));//false System.out.println("a || b:"+(a || b));//true System.out.println("!(a && b):"+!(a && b));//true //逻辑与运算:两个变量都为真,结果才为真true(一假则假,两真则真) //逻辑或运算:两个变量中有一个变量为真,结果为真true(一真则真,两假则假) //非(取反):未取反之前为真,则结果为假false,反之为真true(与原来结果相反) //短路运算 int c = 5; boolean d = (c<4) && (c++<4); //因为c<4为假并且为逻辑与运算,所以直接返回false,&&后面的代码没有再执行了,所以c++没有执行; //如果c++执行的话,下面的输出语句应该输出的是6,显然这里并没有执行,所以下面输出5, //同时证明了逻辑与运算的第一个变量为false的话就直接返回false,而不会再去执行&&后面的代码了 System.out.println(d);//false System.out.println(c);//输出5 } }
位运算
package operator; public class Demo06 { public static void main(String[] args) { /* A = 0011 1100 B = 0000 1101 A&B = 0000 1100 如果两个二进制数,同一个位置有一个为0,则为0;两个都为1,则为1 A|B = 0011 1101 如果两个二进制数,同一个位置有一个为1,则为1,两个都为0,则为0 A^B = 0011 0001 如果两个二进制数,同一个位置的数字相同,则为0,不相同,则为1 ~B = 1111 0010 取反 <<(左移) 左移一位,即*2 >>(右移) 右移一位,即/2 0000 0000 0 0000 0001 1 0000 0010 2 0000 0011 3 0000 0100 4 0000 1000 8 0001 0000 16 */ System.out.println(2<<3);//输出16 /* 2向左移3位,即把二进制数的1向左移3位 0000 0010 2 0000 0100 4 0000 1000 8 0001 0000 16 */ } }
字符串连接
package operator; public class Demo07 { public static void main(String[] args) { int a = 10; int b = 20; a+=b;//a = a + b a-=b;//a = a - b System.out.println(a); //字符串连接符 + ,String System.out.println(""+a+b);//输出1020,在操作数的前面如果有String类型,那么其它的操作数都 转换为String类型,然后进行连接输出 System.out.println(a+b+"");//输出30,如果操作数在String类型前面,则会进行算术运行,而不会· 被转换为String类型再跟后面的操作数进行连接 } }
三元运算符
package operator; public class Demo08 { public static void main(String[] args) { //x ? y : z //如果x等于true,则结果为y,否则结果为z int score = 80; String type = score < 60 ? "不及格" : "及格"; System.out.println(type);//输出及格 } }