一、算数运算符
一元运算符
算术一元运算符一共有3个,分别是-、++和–。
示例代码如下:
int a = 12; //是把a变量取反 System.out.println(-a); //先把a赋值给b变量再加一,即先 赋值后++ int b = a++; System.out.println(b); //先把a加一,再把a赋值给b变量,即先++后赋值 b = ++a; System.out.println(b);
输出结果:
-12 12 14
二元运算符
二元运算符包括:+、-、*、/和%,这些运算符对数值类型数据都有效
算术赋值运算符
二、关系运算符
关系运算是比较两个表达式大小关系的运算,它的结果是布尔类型数据,即true或false。关系运算符有 6种:==、!=、>、<、>=和<=。
==和!=可以应用于基本数据类型和引用数据类型。当用于引用数据类型比较时,比较的是 两个引用是否指向同一个对象,但在实际开发过程中多数情况下,只是比较对象的内容是否相 当,不需要比较是否为同一个对象。
三、逻辑运算符
逻辑运算符是对布尔型变量进行运算,其结果也是布尔型。
短路与(&&)和短路或(||)能够采用最优化的计算方式,从而提高效率。在实际编程 时,应该优先考虑使用短路与和短路或。
示例代码如下:
int i = 0; int a = 10; int b = 9; if ((a > b) || (i == 1)) { System.out.println("或运算为 真"); } else { System.out.println("或运算为 假"); } if ((a < b) && (i == 1)) { System.out.println("与运算为 真"); } else { System.out.println("与运算为 假"); } if ((a > b) || (a++ == --b)) { System.out.println("a = " + a); System.out.println("b = " + b); }
运行结果:
或运算为 真 与运算为 假 a = 10, b = 9
四、位运算符
位运算是以二进位(bit)为单位进行运算的,操作数和结果都是整型数据。位运算符有如下几个运算 符:&、|、^、~、>>、<<和>>>,以及相应的赋值运算符。
无符号右移>>>运算符仅被允许用在int和long整数类型, 如果用于short或byte数据, 则数据在 位移之前,转换为int类型后再进行位移计算。
位运算示例代码:
//十进制50 byte a = 0B00110010; //十进制94 byte b = 0B01011110; // 0B01111110 System.out.println("a | b = " + (a | b)); // 0B00010010 System.out.println("a & b = " + (a & b)); // 0B01101100 System.out.println("a ^ b = " + (a ^ b)); // 0B10100001 System.out.println("~b = " + (~b)); // 0B00001100 System.out.println("a >> 2 = " + (a >> 2)); // 0B00011001 System.out.println("a >> 1 = " + (a >> 1)); // 0B00001100 System.out.println("a >>> 2 = " + (a >>> 2)); // 0B11001000 System.out.println("a << 2 = " + (a << 2)); // 0B01100100 System.out.println("a << 1 = " + (a << 1)); int c = -12; System.out.println("c >>> 2 = " + (c >>> 2)); System.out.println("c >> 2 = " + (c >> 2));
运行结果:
a | b = 126 a & b = 18 a ^ b = 108 ~b = -95 a >> 2 = 12 a >> 1 = 25 a >>> 2 = 12 a << 2 = 200 a << 1 = 100 c >>> 2 = 1073741821 c >> 2 = -3
五、其他运算符
除了前面介绍的主要运算符,Java还有一些其他运算符。
三元运算符(? :)。例如x?y:z;,其中x、y和z都为表达式。
小括号。起到改变表达式运算顺序的作用,它的优先级最高。
中括号。数组下标。
引用号(.)。对象调用实例变量或实例方法的操作符,也是类调用静态变量或静态方法的操作 符。
赋值号(=)。赋值是用等号运算符(=)进行的。
instanceof。判断某个对象是否为属于某个类。
new。对象内存分配运算符。
箭头(->)。Java 8新增加的,用来声明Lambda表达式。
双冒号(::)。Java 8新增加的,用于Lambda表达式中方法的引用。
示例代码如下:
import java.util.Date; public class HelloWorld { public static void main(String[] args) { int score = 80; // 三元运算符(? : ) String result = score > 60 ? "及格" : "不及格"; System.out.println(result); // new运算符可以创建Date对象 Date date = new Date(); //通过.运算符调用方法 System.out.println(date.toString()); } }
六、运算符优先级
在一个表达式计算过程中,运算符的优先级非常重要。表中从上到小,运算符的优先级从高到低, 同一行具有相同的优先级。二元运算符计算顺序从左向右,但是先级15的赋值运算符的计算顺序从右 向左的。
运算符优先级大体顺序,从高到低是:
算术运算符→位运算符→关系运算符→逻辑运算符 →赋值运算符