java的运算符
- 算数运算符:+ - * / % ++ --
- 赋值运算符:= += -= *= /= %=
- 关系运算符:> < >= <= == !=
- 逻辑运算符:! & | ^(取反) && ||
- 位运算符:! & | ~ >> << >>>(无符号右移)字
- 符串连接符号:+
算数运算符:
对于+ 、-、*、/ 这里不做介绍。
/ (除号的右边不能为0)
++i/--i: 先自增/自减再参与运算
i++/i--: 先参与运算再自增/自减
赋值运算符:
-= --> a-=b;---> a = a-b;
*= --> a*=b;---> a = a*b;
/= --> a/=b;---> a = a/b;
%= --> a%=b;---> a = a%b;
注意:
short b = 2;
b = b + 3;//两次运算 第一次 相加 第二次 赋值 不会自动转换
b+=3; //这是一次运算 只做了一次赋值运算 会自动转换
System.out.println(b)// b = b + 3;会报错,因为3默认为int型,类型不匹配
示例:
class Demo_1
{
public static void main(String[] args)
{
int a = 1;
int b = 2;
/* int aplus = a++;//先赋值再自增
int bplus = b--;
System.out.println(a+" "+b);//a=2 b=1
System.out.println(aplus+" "+bplus);//aplus=1 bplus=2
*/
int aplus1 = ++a;//先自增后赋值
int bplus1 = --b;
System.out.println(a+" "+b);//a=2 b=1
System.out.println(aplus1+" "+bplus1);//aplus=2 bplus=1
}
}empty int a = 2;
int b = 3;
int c = ((a++)+(++b))*2 + (--a)%(b++) - (++a)*3 + (--b)/(--a);
/*
((a++)+(++b))*2 = 12 a = 3 b = 4
(--a)%(b++) = 2%4 = 2 a = 2 b = 5
(++a)*3 = 9 a = 3 b = 5
(--b)/(--a) = 4/2 =2 a = 2 b = 4
*/class Demo_3
{
public static void main(String[] args)
{
/* short b = 2;
b = b+3;//两次运算先相加后赋值 不会自动转型
b+=3;//一次运算 会自动转型
*/
/* int a = 12;
结果
1. a+=a; 24
2. a-=2; 10
3. a*=2+3; 60 a = a*(2+3)
4/ a/=a+a; 0
*/
}
}
关系运算符:
关系运算符的结果只有true false逻辑运算符:
& 两边都是真,输出才为真
| 两边只要有一个真,输出为真
^ 异或相同为false,相反则为true。
逻辑表达式的值 真|假
两种逻辑与(&&和&)的运算规则基本相同,两种逻辑或(||和|)的运算规则也基本相同。
区别:
&和|运算是把逻辑表达式全部计算完,而&&和||运算具有短路计算功能。
对于&来说,当左侧条件为false,右侧要继续计算, 而对于&&来说,如果左侧的条件为false,则不计算右侧的条件,即出现短路现象。
短路计算:是指系统从左至右进行逻辑表达式的计算,一旦出现计算结果已经确定的情况,则计算过程即被终止。
对于&&来说,只要运算符左侧的值为false,则因无论运算符右侧的值为true或为false,其最终结果都为false。 所以,系统一旦判断出&&运算符左端的值为false,则系统将终止其后的计算过程;
对于|来说,当左侧条件为true,右侧要继续计算。
对于 || 运算来说,只要运算符左端的值为true,则因无论运算符右端的值为true或为false,其最终结果都为true。 所以,系统一旦判断出|| 运算符左端的值为true,则系统将终止其后的计算过程。
下面以| 和||的举例,根据对a,b的结果进行分析比较|与||的不同:
a = 3;
b = 2;
//第一个表达式为真,后面的需要继续运行
boolean b11 = (a--)/(b++)<2 | (--a)*(--b)!=4 | (a++)%(b--)==2;
// 2 3 1 2 2 1
System.out.println(b11+"\t"+a +"\t"+b);
// true 2 1
a = 3;
b = 2;
//在(a--)/(b++)<2 为真,后面的表达式不需要再运行
boolean b12 = (a--)/(b++)<2 || (--a)*(--b)!=4 || (a++)%(b--)==2;
// 2 3
System.out.println(b12+"\t"+a +"\t"+b);
// true 2 3
位运算符:
速度最快
<< 左位移运算符
>> 右位移运算符 带符号右移
>>>(无符号右移) 左侧补位全部补0
& 按位与 0101&1001 = 0001
| 按位或 0101|1001 = 1101
^ 按位异或 0101^1001 = 1100 一个数异或同一个数两次,结果是自身
~ 按位取反
将一个数左移"<<"会使该值乘以2的移动位数次幂。
将一个数右移>>"会使该值除以2的移动位数次幂 左侧补位按最高位
字符串连接符号:字符串数据和任何数据使用+都是相连接的意思,最后都会变成字符串。
三元(目)运算符:格式:关系表达式 ? 表达式1 : 表达式2;
字符串连接符号:
+
字符串数据和任何数据使用 + 都是相连接的意思,最终都会变成字符串
System.out.println("6+6"+6+6);//输出结果为6+666
System.out.println(6+6+"6+6");//输出结果为126+6