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

image-20210126181122591

注意:

基本类型与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

posted @ 2021-01-27 21:04  yulong丶  阅读(91)  评论(0编辑  收藏  举报