H5W3
当前位置:H5W3 > 其他技术问题 > 正文

JAVA运算符合集

运算符丰富是Java语言的主要特点之一。

Java语言中的运算符除了具有优先级之外,还有一个结合性的特点。就是当一个表达式中出现多种运算符时,执行的先后顺序不仅要遵守运算符优先级别的规定,还要受运算符结合性的约束,以便确定是自左向右进行运算还是自右向左进行运算。这些运算符按照操作数的数量可以分为单目运算符、双目运算符和三目运算符。最基本的运算符包括算术运算符、赋值运算符、逻辑运算符和关系运算符等。

一、算数运算符  

1.  一元运算符

算术一元运算一共有 3 个,分别是 -、++ 和 –。 如下表:

运算符   名称 说明  例子 
 –  取反符号   取反运算 b=-a   
 ++  自加一   先取值再加一,或先加一再取值 a++ 或 ++a   
 —  自减一   先取值再减一,或先减一再取值 a– 或 –a   

代码示例:

int a = 12;System.out.println(-a);int b = a++;System.out.println(b);b = ++a;System.out.println(b);

2. 二元运算符

Java 语言中算术运算符的功能是进行算术运算,除了经常使用的加(+)、减(-)、乘(*)和除(\)外,还有取模运算(%)。如下表:

运算符 名称  说明  例子 
 +  加   求 a 加 b 的和,还可用于 String 类型,进行字符串连接操作   a + b
 –  减   求 a 减 b 的差   a – b
 *  乘   求 a 乘以 b 的积   a * b
 /  除   求 a 除以 b 的商   a / b
 %  取余   求 a 除以 b 的余数    a % b

注:算术运算符都是双目运算符,即连接两个操作数的运算符。优先级上,*、/、% 具有相同运算级别,并高于 +、-(+、- 具有相同级别)。

算术运算时应注意以下两点:

  1. 求余(%)运算要求参与运算的两个操作数均为整型,不能为其他类型。
  2. 两个整数进行除法运算,其结果仍为整数。如果整数与实数进行除法运算,则结果为实数。

代码示例:

public static void main(String[] args) {    float f1 = 9 % 4;// 保存取余后浮点类型的结果    double da = 9 + 4.5; // 双精度加法    double db = 9 - 3.0; // 双精度减法    double dc = 9 * 2.5; // 双精度乘法    double dd = 9 / 3.0; // 双精度除法    double de = 9 % 4; // 双精度取余    System.out.println("整数的算术运算"); // 整数的加、减、乘、除和取余    System.out.printf("9+4=%d \n", 9 + 4);    System.out.printf("9-4=%d \n", 9 - 4);    System.out.printf("9*4=%d \n", 9 * 4);    System.out.printf("9/4=%d \n", 9 / 4);    System.out.printf("9%%4=%d \n", 9 % 4);    System.out.println("\n浮点数的算术运算"); // 浮点数的加、减、乘、除和取余    System.out.printf("9+4.5f=%f \n", 9 + 4.5f);    System.out.printf("9-3.0f=%f \n", 9 - 3.0f);    System.out.printf("9*2.5f=%f \n", 9 * 2.5f);    System.out.printf("9/3.0f=%f \n", 9 / 3.0f);    System.out.printf("9%%4=%f \n", f1);    System.out.println("\n双精度数的算术运算"); // 双精度数的加、减、乘、除和取余    System.out.printf("9+4.5=%4.16f \n", da);    System.out.printf("9-3.0=%4.16f \n", db);    System.out.printf("9*2.5=%4.16f \n", dc);    System.out.printf("9/3.0=%4.16f \n", dd);    System.out.printf("9%%4=%4.16f \n", de);    System.out.println("\n字符的算术运算"); // 对字符的加法和减法    System.out.printf("'A'+32=%d \n", 'A' + 32);    System.out.printf("'A'+32=%c \n", 'A' + 32);    System.out.printf("'a'-'B'=%d \n", 'a' - 'B');}

结果如下:

整数的算术运算
9+4=13
9-4=5
9*4=36
9/4=2
9%4=1

浮点数的算术运算
9+4.5f=13.500000
9-3.0f=6.000000
9*2.5f=22.500000
9/3.0f=3.000000
9%4=1.000000

双精度数的算术运算
9+4.5=13.5000000000000000
9-3.0=6.0000000000000000
9*2.5=22.5000000000000000
9/3.0=3.0000000000000000
9%4=1.0000000000000000

字符的算术运算
'A'+32=97
'A'+32=a
'a'-'B'=31

运算规则总结如下:

整数类型的结果容易理解,浮点型和双精度型返回的结果都带有小数,字符型将会把字符转换为 ASCII 码再运算。整数之间的运算结果只保留整数部分,浮点型运算时保留 6 位小数部分,双精度运算时则保留 16 位小数部分。在一个表达式中的多个算术运算符的优先级别相同,例如“a-b+c”,此时将按照运算符的结合方向决定顺序。算术运算符的结合方向都是“从左至右”,即先左后右。因此 b 先与减号结合,执行“a-b”的运算,再执行加 c 的运算。  

二、算术赋值运算符

算术赋值运算符只是一种简写,一般用于变量自身的变化 。如下表:

 运算符 含义  实例   结果
  +=  将该运算符左边的数值加上右边的数值, 其结果赋值给左边变量本身   int a=5; a+=2;    a=7  
  -=  将该运算符左边的数值减去右边的数值, 其结果赋值给左边变量本身   int a=5; a-=2;  a=3
  *=  将该运算符左边的数值乘以右边的数值, 其结果赋值给左边变量本身   int a=5; a*=2;  a=10  
  /=  将该运算符左边的数值整除右边的数值, 其结果赋值给左边变量本身   int a=5; a/=2;  a=2
  %=  将该运算符左边的数值除以右边的数值后取余,其结果赋值给左边变量本身   int a=5; a%=2;   a=1

代码示例:

int a = 1;
int b = 2;a += b; // 相当于 a = a + bSystem.out.println(a);a += b + 3; // 相当于 a = a + b + 3System.out.println(a);a -= b; // 相当于 a = a - bSystem.out.println(a);a *= b; // 相当于 a=a*bSystem.out.println(a);a /= b; // 相当于 a=a/bSystem.out.println(a);a %= b; // 相当于 a=a%bSystem.out.println(a);

注意:虽然 Java 支持一次为多个变量赋值的写法,但这会导致程序的可读性降低,因此不推荐写。  

三、逻辑运算符

逻辑运算符把各个运算的关系表达式连接起来组成一个复杂的逻辑表达式,以判断程序中的表达式是否成立,判断的结果是 true 或 false 。如下表:

运算符  用法   含义  说明  实例 结果 
  &&   a&&b   短路与   ab 全为 true 时,计算结果为 true,否则为 false。   2>1&&3<4   true
  ||   a||b   短路或   ab 全为 false 时,计算结果为 false,否则为 true。   2<1||3>4   false
  !   !a   逻辑非   a 为 true 时,值为 false,a 为 false 时,值为 true。   !(2>4)   true
  |   a|b   逻辑或   ab 全为 false 时,计算结果为 false,否则为 true。   1>2|3>5   false
  &   a&b   逻辑与   ab 全为 true 时,计算结果为 true,否则为 false。   1<2&3<5   true
  1. && 与 & 区别:如果 a 为 false,则不计算 b(因为不论 b 为何值,结果都为 false)
  2. || 与 | 区别:如果 a 为 true,则不计算 b(因为不论 b 为何值,结果都为 true)

注意:短路与(&&)和短路或(||)能够采用最优化的计算方式,从而提高效率。在实际编程时,应该优先考虑使用短路与和短路或。  

结果为 boolean 型的变量或表达式可以通过逻辑运算符结合成为逻辑表达式。逻辑运算符 &&、|| 和 !按下图进行逻辑运算。

 a a&&b    a||b      !a
  true   true   true   true   false
  false   true   false   true   true
  true   false   false   true   false
  false   false   false   false   true

逻辑运算符的优先级为:!运算级别最高,&& 运算高于 || 运算。!运算符的优先级高于算术运算符,而 && 和 || 运算则低于关系运算符。结合方向是:逻辑非(单目运算符)具有右结合性,逻辑与和逻辑或(双目运算符)具有左结合性。 

四、关系型运算符 

关系运算符(relational operators)也可以称为“比较运算符”,用于用来比较判断两个变量或常量的大小。关系表达式是由关系运算符连接起来的表达式。关系运算符中“关系”二字的含义是指一个数据与另一个数据之间的关系,这种关系只有成立与不成立两种可能情况,可以用逻辑值来表示,逻辑上的 true 与 false 用数字 1 与 0 来表示。关系成立时表达式的结果为 true(或 1),否则表达式的结果为 false(或 0)。  如下图:

运算 符    含义    说明    实例    结果   
  > 大于运算符 只支持左右两边操作数是数值类型。如果前面变量的值大于后面变量的值, 则返回 true。 2>3 false
>= 大于或等于运算符 只支持左右两边操作数是数值类型。如果前面变量的值大于等于后面变量的值, 则返回 true。 4>=2    true   
  < 小于运算符 只支持左右两边操作数是数值类型。如果前面变量的值小于后面变量的值,则返回 true。    2<3 true
 <= 小于或等于运算符 只支持左右两边操作数是数值类型。如果前面变量的值小于等于后面变量的值, 则返回 true。    4<=2  false   
 == 相等运算符 如果进行比较的两个操作数都是数值类型,无论它们的数据类型是否相同,只要它们的值相等,也都将返回 true。如果两个操作数都是引用类型,只有当两个引用变量的类型具有父子关系时才可以比较,只要两个引用指向的不是同一个对象就会返回 true。Java 也支持两个 boolean 类型的值进行比较。    4==497==’a’5.0==5true==false    truetruetruefalse   
  != 不相等运算符    如果进行比较的两个操作数都是数值类型,无论它们的数据类型是否相同,只要它们的值不相等,也都将返回 true。如果两个操作数都是引用类型,只有当两个引用变量的类型具有父子关系时才可以比较,只要两个引用指向的不是同一个对象就会返回 true。    4!=2 true   

注意 : 

  1. 基本类型的变量、值不能和引用类型的变量、值使用 == 进行比较;boolean 类型的变量、值不能与其他任意类型的变量、值使用 == 进行比较;如果两个引用类型之间没有父子继承关系,那么它们的变量也不能使用 == 进行比较。
  2. == 和 != 可以应用于基本数据类型和引用类型。当用于引用类型比较时,比较的是两个引用是否指向同一个对象,但当时实际开发过程多数情况下,只是比较对象的内容是否相当,不需要比较是否为同一个对象。

总结如下:

关系表达式通常用于 Java 程序的逻辑判断语句的条件表达式中。使用关系表达式要注意以下几点:

  1. 运算符 >=、==、!=、<= 是两个字符构成的一个运算符,用空格从中分开写就会产生语法错误。例如 x> =y; 是错误的,但是可以写成x >= y; 在运算符的两侧增加空格会提高可读性。同样将运算符写反,例如 =>、=<、=! 等形式会产生语法错误。
  2. 由于计算机内存放的实数与实际的实数存在着一定的误差,如果对浮点数进行 ==(相等)或 !=(不相等)的比较,容易产生错误结果,应该尽量避免。
  3. 不要将“==”写成“=”。

关系运算符的优先级为:>、<、>=、<= 具有相同的优先级,并且高于具有相同优先级的 !=、==。关系运算符的优先级高于赋值运算符而低于算术运算符,方向是自左向右。  

五、自增和自减运算符

在对一个变量做加 1 或减 1 处理时,可以使用自增运算符 ++ 或自减运算 –。++ 或 — 是单目运算符,放在操作数的前面或后面都是允许的。++ 与 — 的作用是使变量的值增 1 或减 1。操作数必须是一个整型或浮点型变量。如下图:

运算符  含义  实例  结果 
  i++   将 i 的值先使用再加 1 赋值给 i 变量本身 int i=1;int j=i++; i=2j=1   
  ++i   将 i 的值先加 1 赋值给变量 i 本身后再使用 int i=1;int j=++i;    i=2j=2   
  i–   将 i 的值先使用再减 1 赋值给变量 i 本身 int i=1;int j=i–;    i=0j=1   
  –i   将 i 的值先减 1 后赋值给变量 i 本身再使用 int i=1;int j=–i;    i=0j=0   

在使用自增/自减运算时应注意下面几个问题:

  1. 自增/自减只能作用于变量,不允许对常量、表达式或其他类型的变量进行操作。常见的错误是试图将自增或自减运算符用于非简单变量表达式中。
  2. 自增/自减运算可以用于整数类型 byte、short、int、long,浮点类型 float、double,以及字符串类型 char。
  3. 在 Java1.5 以上版本中,自增/自减运算可以用于基本类型对应的包装器类 Byte、Short、Integer、Long、Float、Double 和 Character。
  4. 自增/自减运算结果的类型与被运算的变量类型相同。

无论是何种类型,只要是自增和自减运算符支持的类型,都可以参与运算。

六、移位运算符

1. 位逻辑运算符

位逻辑运算符包含 4 个:&(与)、|(或)、~(非)和 ^(异或)。除了 ~(即位取反)为单目运算符外,其余都为双目运算符。 如下图:

 运算符 含义 示例  结果 
  &   按位进行与运算(AND)   4 & 5   4
  |   按位进行或运算(OR)   4 | 5   5
  ^   按位进行异或运算(XOR)   4 ^ 5   1
  ~   按位进行取反运算(NOT)  

~ 4

 

-5

位与运算符

位与运算符为&,其运算规则是:参与运算的数字,低位对齐,高位不足的补零,如果对应的二进制位同时为 1,那么计算结果才为 1,否则为 0。因此,任何数与 0 进行按位与运算,其结果都为 0。

 100&0

运算过程如下:

位或运算符

位或运算符为|,其运算规则是:参与运算的数字,低位对齐,高位不足的补零。如果对应的二进制位只要有一个为 1,那么结果就为 1;如果对应的二进制位都为 0,结果才为 0。

  11|7

运算过程如下:

 

位异或运算符

位异或运算符为^,其运算规则是:参与运算的数字,低位对齐,高位不足的补零,如果对应的二进制位相同(同时为 0 或同时为 1)时,结果为 0;如果对应的二进制位不相同,结果则为 1。  

11^7

运算过程如下:

注意:在有的高级语言中,将运算符^作为求幂运算符,要注意区分。  

位取反运算符

位取反运算符为~,其运算规则是:只对一个操作数进行运算,将操作数二进制中的 1 改为 0,0 改为 1。

~10

运算过程如下:

位运算符的操作数只能是整型或者字符型数据以及它们的变体,不用于 float、double 或者 long 等复杂的数据类型。 

2. 位移运算符

位移运算符用来将操作数向某个方向(向左或者右)移动指定的二进制位数。 如下图:

 

运算符  含义  示例  结果 
  »   右移位运算符   8»1  4
  «   左移位运算符   9«2  36

左位移运算符

左移位运算符为«,其运算规则是:按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。 

11 «1

运算过程如下:

右位移运算符

右位移运算符为»,其运算规则是:按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补零。 

 11  »  1

 3. 复合位赋值运算符

所有的二进制位运算符都有一种将赋值与位运算组合在一起的简写形式。复合位赋值运算符由赋值运算符与位逻辑运算符和位移运算符组合而成。 如下图:

 运算符 含义   示例 结果 
  &=   按位与赋值   num1 &= num2   等价于 num 1=num 1 & num2
  |=   按位或赋值   num1 |= num2   等价于 num 1=num 1 | num2
  ^=   按位异或赋值   num1 ^= num2   等价于 num 1=num 1 ^ num2
  -=   按位取反赋值   num1 ~= num2   等价于 num 1=num 1 ~ num2
  «=   按位左移赋值   num1 «= num2   等价于 num 1=num 1 « num2
  »=   按位右移赋值   num1 »= num2   等价于 num 1=num 1 » num2

代码示例:

int a = 1;int b = 2;int c = 3;a &= 4;a |= 4;a ^= c;a -= 6;b >>= 1;c <<= 1;System.out.println("a = " + a);System.out.println("b = " + b);System.out.println("c = " + c);

结果如下:

a = 1b = 1c = 6  

七、条件运算符

Java提供了一个特别的三元运算符(也叫三目运算符)经常用于取代某个类型的 if-then-else 语句。条件运算符的符号表示为“?:”,使用该运算符时需要有三个操作数,因此称其为三目运算符。使用条件运算符的一般语法结构为:  
result = <expression> ? <statement1> : <statement3>;

其中,expression 是一个布尔表达式。当 expression 为真时,执行 statement1, 否则就执行 statement3。此三元运算符要求返回一个结果,因此要实现简单的二分支程序,即可使用该条件运算符  

本文地址:H5W3 » JAVA运算符合集

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址