Java运算符

一、含义

数学因有运算而变得无所不能,而编程本质上就是一种数学,运算也必不可少。运算符是表示运算的符号,按参加运算的数的个数分有一/二/三元(目)运算符;按其含义可分为算术运算符、赋值运算符、关系运算符、逻辑运算符、位运算符以及条件运算符。

二、分类

1. 算术运算符

算术运算符名称描述运算个数举例
+加法相加运算符两侧的值2a + b
-减法左操作数减去右操作数2a - b
*乘法相乘操作符两侧的值2a * b
/除法左操作数除以右操作数2a / b
%取余左操作数除右操作数的余数2a % b
++自增操作数的值增加 11++i(或 i++)
- -自减操作数的值减少 11- -i(或 i- -)

注意

  • ++/- -的位置不同,表示的含义也不同。在前表示先计算后赋值,在后表示先赋值后计算。
//自增1++、自减1--
//++/--在前先运算后赋值;在后先赋值后运算
int a = 10;
System.out.println(a++);//输出10
//此时a=11
System.out.println(++a);//输出12
System.out.println(a);//输出12
System.out.println(a--);//输出12
//此时a=11
System.out.println(--a);//输出10
System.out.println(a);//输出10
  • 注意除法运算的特殊性,两个整数相除结果不一定为整数,使用除法时,必须有浮点数数据格式(float/double)。
int a = 10;
int b = 15;
double v = a;
//注意除法运算的特殊性,两个整数相除结果不一定为整数
//使用除法时,必须有浮点数数据格式(float/double)
System.out.println(a/b);//输出0
System.out.println(v/b);//输出0.666..
System.out.println((double)a/b);//输出0.666..
System.out.println(Double.valueOf(a)/b);//输出0.666..
  • 当几个不同数据格式的变量参与运算时,若有高级别的变量(int/long/float/double),则结果为最高级别数据格式,否则为默认数据格式(int/double)。
long a = 10;
int b = 10;
short c = 10;
byte d = 10;
float e = 10;
System.out.println(a+b+c+d);//long
System.out.println(b+c+d);//int
System.out.println(c+d);//int
System.out.println(a+e);//float

2. 赋值运算符

赋值运算符名称描述运算个数举例
=被赋予等号右边的值赋予左边变量2a=1
+=自增将变量加上一个值作为变量新值2a+=2(同a=a+2)
-=自减将变量减去一个值作为变量新值2a-=2(同a=a-2)
*=自乘将变量加上一个值作为变量新值2a*=2(同a=a*2)
/=自除将变量加上一个值作为变量新值2a/=2(同a=a/2)

3. 关系运算符(返回True/False)

关系运算符名称描述运算个数举例
==等于判断左值是否等于右值2a==b
!=不等于判断左值是否与右值不相等2a!=b
>[=]大于[等于]判断左值是否大于(等于)右值2a>[=]b
<[=]小于[等于]判断左值是否小于(等于)右值2a<[=]b

4. 逻辑运算符(返回True/False)

逻辑运算符名称描述运算个数举例
&&并且当两个条件同为真时,返回真,否则返回假2(1>2)&&(2>1)
||或者当两个条件同为假时,返回假,否则返回真2(1>2)||(2>1)
!当条件为真时返回假,为假时返回真1!(1>2)

注意

  • 关系运算符用于连接两个数,而逻辑运算符用来连接两个条件(Boolean值)。
  • 条件判断采用短路原则:当只需判断第一个条件的真假便可得到整个逻辑运算的真假时,无需判断执行后续条件,如一个假并一个条件必为假,一个真或一个条件必为真。
 //短路运算,&&执行到第一个false条件,||执行到第一个true条件
int c = 5;
boolean d = (c<4)&&(c++<4);
boolean e = (c>4)||(c++<4);
//当判断第一个条件c<4为false后,不需判断(c++<4),c值不变
//当判断第一个条件c>4为true后,不需判断(c++<4),c值不变
System.out.println(c);

5. 位运算符(二进制)

以10(0000 1010)和15(0000 1111)举例说明。

位运算符名称描述运算个数举例
&当两个字位均为1时,返回1,否则返回0210&15=00001010=10
|当两个字位均为0时,返回0,否则返回1210|15=00001111=15
^异或当两个字位值不同返回1,相同时返回0210^15=00000101=5
~字位为1的变为0,为0的变为12~10=11110101=-11
<<左移将所有字位值向左移动210<<2=00101000=40
>>右移将所有字位值向右移动210>>2=00000101=5

注意

  • 位运算由于是直接操作适合机器执行的二进制数,故其效率非常高,可通过使用位运算来优化代码。
  • 不同位运算有不同作用,需要自己探索,如左移/右移一位相当于乘/除2。

6. 条件运算符

条件运算符只有一种,即 ? :,同时也是唯一的三元运算符。它本质上是if-else语句的缩写,其语法格式为:

判断条件 ? 为真时返回值 : 为假时返回值

(3>4) ? 1 : 2 返回 2

7. 其他运算方法

使用Math类的方法,如pow()、abs()、max()、min()、sin()等。

//注意Math类里的pow方法返回的是一个double值
double a = Math.pow(2,3);
System.out.println(a);//输出8

三、运算优先级(了解)

在实际编程中,不需要去记忆运算符的优先级别,也不要刻意的使用运算符的优先级别,对于不清楚优先级的地方使用小括号去进行替代,直观易读。下面是java运算符优先级表,以供参考。
在这里插入图片描述
说明一下,结合性表示当有多个同等级运算符时,是从左往右计算(左结合),还是从有往左计算(右结合)。如1+2+3就是 (1+2)+3a+=b*=3就是a+=(b*=3)a+=3*b(如果按左结合的方式计算,则a=3*(a+b)

int a = 2;
int b = 3;
int c;
System.out.println(a+=b*=3);//11
a = 2;b =3;//初始化
c = a+=b;
c *= 3;
System.out.println(c);//15
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值