一、算术运算符
①加法:+ 减法:- 乘法:* 除法:/ 取余数:%
②+=:a+=b等价于a=a+b;
-=:a-=b等价于a=a-b;
=:a=b等价于a=a*b;
/=:a/=b等价于a=a/b;
%=:a%=b等价于a=a%b;
③一元运算符:
如果运算符放在操作数之前(前缀模式),变量的递增或递减操作将在更新后的变量值被用于任何由它构成的赋值操作之前执行。
例如:a=1;
b=++a;
分析:上述代码执行后,变量a的值是2,变量b的值也是2。这是因为在第二行中变量a的递增(从1到2)发生在它的值赋给b之前。因此这行代码b=++a;在逻辑上等价于下面两行代码:
a=a+1;
b=a;
如果运算符放在操作数之后(后缀模式),递增或递减操作发生在原来的变量值被用于任何由它构成的赋值操作之后。
例如:a=1;
b=a++;
分析:上述代码执行后,变量b的值是1,而变量a的值是2。这是因为在第二行中变量a的递增(从1到2)发生在它的值赋给b之后。因此这行代码b=a++;在逻辑上等价于下面两行代码:
b=a;
a=a+1;
二、关系和逻辑运算符
等于:== 不等于:!= 大于:> 小于:<
大于等于:>= 小于等于:<=
与:& 或:| 异或:^
逻辑与:&& 逻辑或:|| 逻辑非:!
三、三元表达式
布尔表达式?a:b
布尔表达式为true结果为a,表达式为false结果为b。
java三元表达式有字符强转的功能,会把后面的强转为和前面的类型一样:
当你使用三元运算符,两边的操作数的类型不一致的时候,这就涉及到三元操作符的转换规则:
1.若果两个操作数不可转换,则不做转换,返回值为Object类型。
2.若两个操作数是明确类型的表达式(比如变量),则按照正常的二进制数字来转换。int类型转换为long类型,long类型转换成float类型。
3.若两个操作数中有一个是数字S,另外一个是表达式,且其类型为T,那么,若数字S在T的范围内,则转换为T类型;若S超过了T的范围,则T转换为S类型。
4.若两个操作数字都是直接数字。则返回值类型为范围较大者。
例1:
public class yunsuanfu {
public static void main(String[] args) {
int a = 5;
System.out.println("value is "+((a<5) ? 10.9 : 9));
}
}
分析:注意下“((a<5) ? 10.9 : 9)”,里面有一个10.9,而后面跟了一个9,这是java就会根据运算符的精确度类型进行自动类型转换,由于前面有一个10.9,所以后面的9会被转换成9.0,所以输出的是9.0.
例2:
char x='x';
int i =10;
System.out.println(false ? i : x);
System.out.println(false ? 10 : x);
}
输出结果是:120 x
int i=10;中i是一个int型变量,所以第一个输出x被强制转换成int型了,应为i是int类型,x的值转换成int值是120,所以第一个输出120。
至于第二个输出,java规范中提到,当后两个表达式有一个是常量表达式(上面指10),另外一个类型是T(上面指char)时,而常量表达式可以被T表示时,输出结果是T类型。