Java运算符
一、运算符分类
运算符优先级
算术运算符 | 一元 | ++,-- |
二元 | +,-,*,/,% | |
赋值运算符 | = | |
扩展运算符 | +=,-=,*=,/= | |
关系运算符 | >,<,==,!=,>=,<=,instanceof | |
逻辑运算符 | &&,||,!,^ | |
位运算符 | &,|,~,^,>>,<<,>>> | |
条件运算符 | ?: | |
字符串连接符 | + |
二、算术运算符
(1)一元运算符
a++:先使用变量a后再自增。
++a:变量a先自增后再使用。
public class TestOperator { public static void main(String args[]) { int x = 10; int y = x++; int z = ++y; System.out.printf("%d %d %d", x, y, z); // 11 11 11 } }
(2)二元运算符
1. 整数运算
- 操作数只要有Long类型,结果为Long类型,否则结果为int类型。
2. 浮点运算
- 操作数只要有double类型,结果为double类型,否则为float类型。
3. 取模运算
- 操作数可为浮点型,但一般为整型。
- 余数的符号与第一操作数相同。
import sy.GetType; public class TestOperator { public static void main(String args[]) { GetType get = new GetType(); short a = 10; int b = 100; Long c = 3000000000L; System.out.println("Type(a + b) = " + get.getType(a + b)); // java.lang.Integer System.out.println("Type(b + c) = " + get.getType(b + c)); // java.lang.Long double d = 3.14; float e = 0.1f; float f = 3.14f; System.out.println("Type(e + f) = " + get.getType(e + f)); // java.lang.Float System.out.println("Type(e + d) = " + get.getType(e + d)); // java.lang.Double System.out.println("10%3 = " + 10%3); // 1 System.out.println("10%(-3) = " + 10%(-3)); // 1 System.out.println("-10%3 = " + -10%3); //-1 }
三、赋值运算符
public class TestOperator { public static void main(String args[]) { int a = 200; int b = 320; System.out.printf("a + b = %d\n", a += b); // 520 b += 3*a - 60; System.out.printf("b = b + (3*a-60) = %d\n", b); // 1820 } }
四、关系运算符
这里少见的就是instanceof运算符:A instanceof B,这是判断对象A是否属于类B,返回值为boolean类型。
public class TestOperator { public static void main(String args[]) { Integer a = 233; System.out.println(a instanceof Integer); // true } }
五、逻辑运算符
需要注意的是:逻辑运算符的两个操作数必须为boolean类型。
逻辑与 | & | 两个操作数都为true才返回true;否则为false |
逻辑或 | | | 两个操作数都为false才返回false;否则为true |
逻辑非 | ! | 取反:!true==false, !false==true |
逻辑异或 | ^ | 两个操作数不同为true,相同为false |
短路与 | && | 两个操作数只要有false则为false |
短路或 | || | 两个操作数只要有true则为true |
逻辑(与/或)和短路(与/或)的区别是:逻辑必须处理两个操作数的值,而短路视情况而定。如短路或:只要第一个操作数为true,不需要处理第二个操作数。
public class TestOperator { public static void main(String args[]) { int a = 5; System.out.print((a>8)&&(8>a--)); // false System.out.println("\ta = " + a); // 5 a = 5; System.out.print((a>8)&(8>a--)); // false System.out.println("\ta = " + a); // 4 a = 5; System.out.println(!((a>a--)^(8>++a))); // false } }
六、位运算符
需要注意的是:位运算符的两个操作数为二进制的数字。
按位与 | & | 两个数字都为1才返回1,否则为0 |
按位或 | | | 两个数字都为0才返回0,否则为1 |
取反 | ~ | !0==1, !1==0 |
按位异或 | ^ | 两个数字不同为1,相同为0 |
左移运算符 | << | 左移1位,相当于乘2 |
右移运算符 | >> | 右移1位,相当于除2 |
public class TestOperator { public static void main(String args[]) { int a = 7; // 0111 int b = 9; // 1001 System.out.printf("a&b = %d\n", a&b); //0001 == 1 System.out.printf("a|b = %d\n", a|b); //1111 == 15 System.out.printf("a^b = %d\n", a^b); //1110 == 14 System.out.printf(" ~a = %d\n", ~a); //1000 == -8 } }
七、条件运算符
语法格式:y = Ex ? a : b;
含义:Ex为boolean类型的表达式,若为true则返回a的值,否则返回b的值。
public class TestOperator { public static void main(String args[]) { float p_gift = 0.01f; System.out.print("恭喜你获得《"); System.out.print(p_gift<0.1?"敲一天代码":"睡一天懒觉"); System.out.print("》大礼包!"); } }
八、字符串连接符
运算符+两侧的操作数只要有1个为String类型,系统会自动将另一个操作数转换为String类型,然后进行拼接。
public class TestOperator { public static void main(String args[]) { System.out.println(76 + 4); // 80 System.out.println(76 + '4'); // 128 《'4'不是String类型》 System.out.println(76 + "4"); // 764 } }