Java运算符分类
运算符指明对操作数的运算方式。组成表达式的Java操作符有很多种。
按照操作数数目来分,可以分为以下三类:
- 单目运算符,有一个操作数。
- 双目运算符,有两个操作数。
- 三目运算符,有三个操作数。
按功能来分,可以分为以下六类:
- 算术运算符
- 赋值运算符
- 关系运算符
- 逻辑运算符
- 位运算符
- 其他运算符
Java运算符优先级
当一个表达式中存在多个操作符时,操作符的优先级决定了各部分的计算顺序。下图是Java对运算符优先级顺序所做的规定。
Java运算符的作用及用法
1、方法调用[ ] . ( )
int[] array = {1,2,3,4};//[] 声明一个数组
array[0] = 2;//[] 属性获取 下标里面的内容
System.out.println(array);
System.out.println(array[0]);
int len = array.length;//. 方法调用
System.out.println(len);
运行结果如下
2、Java的算数操作符与其它大多数程序设计语言都是相同的,其中包括加号(+)、减号(-)、乘号(×)、除号(÷)以及取模(%)。整数的除法将会去掉小数位而不是四舍五入。
System.out.println(10%3);//1
System.out.println(-10%3);//-1
System.out.println(-10%-3);//-1
System.out.println(10%-3);//1
取模即为取余。运行结果为:
3、&&(与), ||(或), !(非),~(按位取反),|(按位或),&(按位与),^(按位异或),>>(右移),<<(左移),>>>(无符号右移),双目运算符。运算时均把运算数转换为二进制再做比较
public static boolean fun1(int val){
System.out.println("val < 1");
return val < 1;// true
}
public static boolean fun2(int val){
System.out.println("val < 2");
return val < 2;// false
}
public static boolean fun3(int val){
System.out.println("val < 3");
return val < 3;//true
}
public static void main(String[] args) {
boolean b1= fun1(0) && fun2(2) && fun3(1);
//执行val < 1; true,return val < 2; false
System.out.println(b1);
boolean b2 = fun1(0) || fun2(2) || fun3(1);
//执行val < 1; true
System.out.println(b2);
//boolean b1 = false;
//boolean b2 = true;
}
以上运算符的运算规则:
- ||(或) 只要有一个真,后面一概不执行,有1则为 1,全0才为0。
- &&(与) 只要有一个假,后面一概不执行,有0则为0,全1才为1。
- ~(按位取反):0变1,1变0。
- |(按位或):当两边操作数的位有一边为1时,结果为1,否则为0。
- &(按位与):当相同的位上均为1时结果为1,否则结 果为0。
- ^(按位异或):两边的位不同时,结果为1,否则为0.如1100 ^1010=0110。
- (带符号右移) >>:使指定值的所有位都右移规定的次数。(高位是什么就在前面补什么)。
- (带符号左移) <<:使指定值的所有位都左移规定的次数。丢弃最高位,0补最低位。
- (无符号右移) >>>:忽略符号位扩展,0补最高位。
以带符号左移为例,代码如下:
byte b1 = 11;
byte b2 = 13;
byte b3 = (byte) (b1<<4);
System.out.println(b3);
运行结果:
运算过程:
自增自减运算符(前缀与后缀)
以如下代码为例:
1.
int a2 = 10;
a2++;//11
++a2;//11
int a3 = a2++;//a3=10,a2=11
int a4 = ++a2;//a4=12,a2=12
System.out.println(a3);
System.out.println(a4);
运行结果:
在这里,a3=a2++;表示把a2的值先寄存在一个临时变量tmp里,然后a2自增,最后将tmp的值赋给a3。而a4=++a2;表示a2先自增,然后把值寄存在一个临时变量tmp里,最后将tmp的值赋给a4。(i–,--i同理)。
2.
int i = 10;
int j = 0;
j = i++;
System.out.println(j);
3.
int i = 10;
i = i++;
System.out.println(i);
在这里 i=10,然后 将i的值保存在tmp中,再执行i自增,最后将tmp的值赋给i。最后的结果就就是i=10。
4.
int i = 10;
i++;
System.out.println(i);
5.
int i = 10;
int j = 0;
j = ++i;
System.out.println(j);
在这里 i=10,先执行i的自增,最后将自增后的i值赋给j。结果j为11。
float f1 = 5/2;//5/2=2.5取整,再转为float类型为2.0
float f2 = (float)5.0/2;//5.0/2=2.5
float f3 = (float)5/2;//5/2=2.5强转为float类型为2.5
float f4 = 5/(float)2;//5/2.0=2.5
System.out.println(f1);
System.out.println(f2);
System.out.println(f3);
System.out.println(f4);
赋值运算符:
int a = 40;//赋值号
int i = 1;
int sum = 0;
sum += i; //意思为 sum = sum + i;
其他 * = , / = , - = 等均与 + = 类似。
关系运算符:
判断是否相等:
if(a == 40)//判断是否相等,if语句里面一定是一个布尔值false true,
千万不要写一个“=”
if(a != 40)//判断是否不相等
三目运算符:expression ? sentence1 : sentence2
三目运算符用作判断,当expression的值为真时执行sentence1,否则执行 sentence2,相当于if + else。
if(expression){
sentence1;
} else {
sentence2;
}
int b = 1,
int c = 1
int a = 2;
a >= 2 ? b++ : b--;
b // 结果:2
a < 2 ? c++ : c--;
c //结果: 0