java运算符
java运算符
算术运算符:+,-,*,/,%,++, --
赋值运算符:=
关系运算符:>,<,>=,<=,==,!=instanceof
逻辑运算符:&&,||,!
位运算符:&,|,^,~,>>,<<,>>>
条件运算符:关系表达式? 表达式1 : 表达式2
扩展赋值运算符:+=,-=,*=,/=
基本运算
在JAVA中,基本类型(除了boolean外)可以自动转换的,转换形式为:byte,short,char – int --long–float–double这就是自动转换的顺序了,其中byte,short,char在运算时是自动转换为int型的,而int与long运算时自动转换为long型。从上可知,float与double运算时是自动转换为double再进行计算的,int与float运算时先转换为float再运算。也就是说,表述范围小的可以自动转换为表述范围大的,(表述范围不是指类型的大小)其次,如果你要得到某一类型的数值时,也可以通过强制转换来实现。
int a = 10;
int b = 20;
//复制当前行到下一行:ctrl+alt+下
System.out.println(a+b);
System.out.println(a-b);
System.out.println(a*b);
System.out.println((double)a/b);
System.out.println(a%b);
结果:
30
-10
200
0.5
10
不同类型之间的运算
long c = 201212131212L;
int d = 20;
short e = 2;
byte f = 8;
double g = 12;
float h = 3.0f;
//如果计算中有Long那么计算结果位Long
//如果计算中有double那么计算结果位double
//如果计算中有float那么计算结果位float
//其他结果都为int
System.out.println(c+d+e+f);//Long
System.out.println(d+e+f);//int
System.out.println(e+f);//int
System.out.println(f+g);//double
System.out.println(d+h);//float
结果:
201212131242
30
10
20.0
23.0
注意:
基本类型与String
基本类型与String之间的运算,会转换成String类型,
注意多个数进行运算时:
System.out.println(1+2+“3”+4);
输出为334,
因为前两个为int类型,相加为int类型,然后再与String类型相加,变成String类型,然后再与4相加还是String类型
System.out.println(1+“2”+3+4);
输出为1234;
同理,1与“2”相加变成了String,之后的运算都是String类型
转载自https://blog.csdn.net/shenzixincaiji/article/details/82735390
自增自减运算符
int a = 3;
int b = a++;//执行完这行代码后,先给b赋值,再自增
//a++ a = a + 1;
System.out.println(a);
// a = a + 1;c
int c = ++a;//执行完这行代码前,先自增,再给赋值
System.out.println(a);
System.out.println(b);
System.out.println(c);
结果:
4
5
3
5
幂运算
double pow =Math.pow(3,2);
System.out.println(pow);
逻辑运算符
与(and)、或(or)、非(!)
//逻辑运算
boolean a = true;
boolean b = false;
System.out.println(a && b);//都为真,才为真
System.out.println(a || b);//有一个真,则为真
System.out.println(!(a && b));//真变为假,假变为真
//短路运算
int c = 5;
boolean d = (c<4)&&(c++<4);
System.out.println(c);
System.out.println(d);
结果:
false
true
true
5
false
位运算符
/*
A = 0011 1100
B = 0000 1101
A&B = 0000 1100 A和B中的数字对应位上,如果都为0,则为0;如果都为1,则为1;如果其中一个为0,则为0;(都为1才为1,其他都是0)
A|B = 0011 1101 A和B中的数字对应位上,如果都为0,则为0;如果都为1,则为0;如果其中一个为1,则为1;(都为0才为0,其他都是1)
A^B = 0011 0001 A和B中的数字对应位上,如果都为0,则为0;如果都为1,则为0;如果其中一个为1,另一个为0,则为1;(相同为0,不相同为1)
~B = 1111 0010 对应位取反
*/
/*
<< 左移 *2(左移几就乘多少个2)
>> 右移 /2(右移几就除多少个2)
0000 0000 0
0000 0001 1
0000 0010 2
0000 0011 3
0000 0100 4
0000 1000 8
0001 0000 16
*/
System.out.println(2<<3);
结果:
2*2*2*2=16
三元运算符
//三元运算符
//x ? y : z 如果x == true,则结果为y,否则结果为z
int score = 50;
String type = score < 60 ?"不及格":"及格";
System.out.println(type);
结果:
不及格
扩展赋值运算符
int a = 10;
int b = 20;
a+=b;//a = a + b
//a-=b a = a - b
//a*=b a = a * b
//a/=b a = a / b
System.out.println(a);
结果:
30
运算符优先级
所有的数学运算都认为是从左向右运算的,Java 语言中大部分运算符也是从左向右结合的,只有单目运算符、赋值运算符和三目运算符例外,其中,单目运算符、赋值运算符和三目运算符是从右向左结合的,也就是从右向左运算。
乘法和加法是两个可结合的运算,也就是说,这两个运算符左右两边的操作数可以互换位置而不会影响结果。运算符有不同的优先级,所谓优先级就是在表达式运算中的运算顺序。
一般而言,单目运算符优先级较高,赋值运算符优先级较低。算术运算符优先级较高,关系和逻辑运算符优先级较低。多数运算符具有左结合性,单目运算符、三目运算符、赋值运算符具有右结合性。
Java 语言中运算符的优先级共分为 14 级,其中 1 级最高,14 级最低。在同一个表达式中运算符优先级高的先执行。表 1 列出了所有的运算符的优先级以及结合性。
表1 运算符的优先级
优先级 | 运算符 | 结合性 |
---|---|---|
1 | ()、[]、{} | 从左向右 |
2 | !、+、-、~、++、-- | 从右向左 |
3 | *、/、% | 从左向右 |
4 | +、- | 从左向右 |
5 | «、»、>>> | 从左向右 |
6 | <、<=、>、>=、instanceof | 从左向右 |
7 | ==、!= | 从左向右 |
& | 从左向右 | |
9 | ^ | 从左向右 |
10 | | | 从左向右 |
11 | && | 从左向右 |
12 | || | 从左向右 |
13 | ? : | 从右向左 |
14 | =、+=、-=、*=、/=、&=、|=、^=、~=、«=、»=、>>>= | 从右向左 |
使用优先级为 1 的小括号可以改变其他运算符的优先级,即如果需要将具有较低优先级的运算符先运算,则可以使用小括号将该运算符和操作符括起来。例如下面的表达式:
(x-y)*z/5
在这个表达式中先进行括号内的减法运算,再将结果与 z 相乘,最后将积除以 5 得出结果。整个表达式的顺序按照从左向右执行,比较容易理解。
再来看一个复杂的表达式,如下所示。
--y || ++x && ++z;
这个表达式中包含了算术运算符和逻辑运算符。根据表 1 中列出的优先级,可以确定它的执行顺序如下:
① 先计算 y 的自减运算符,即 --y。
② 再计算 x 的自增运算符,即 ++x。
③ 接着计算 z 的自增运算符,即 ++z。
④ 由于逻辑与比逻辑或的优先级高,这里将 ② 和 ③ 的结果进行逻辑与运算,即 ++x && ++z。
⑤ 最后将 ④ 的结果与 ① 进行逻辑或运算,即 --y||++x&&++z。
转载自http://c.biancheng.net/view/794.html