• Java 运算符(operator)根据功能分类:

    • 算术运算符+,-,*,/,%,++,--
    • 赋值运算符=
    • 关系运算符>,<,>=,<=,==,!=,instanceof
    • 逻辑运算符&&,||,!
    • 位运算符:&,|,^,~,>>,<<,>>>
    • 条件运算符? :
    • 扩展赋值运算符:+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=
  • 运算符根据操作数据的个数分类:

    • 一元运算符:++,--,!,~
    • 二元运算符:+,-,*,/,%,=,>,<,>=,<=,==,!=,instanceof,&&,||,&,|,,>>,<<,>>>,+=,-=,*=,/=,%=,<<=,>>=,&=,=,|=
    • 三元运算符:? :
  • Java的Math类 提供了很多科学和工程计算需要的方法和常数,特殊的运算都需要运用到方法!




一、算术运算符

Ⅰ、四则运算

  • 四则运算符都是二元运算符,语法如下:
    • 加法:var + var
    • 减法:var - var
    • 乘法:var * var
    • 除法:var / var

注意:

  • 进行运算时,参与运算的两个数据中,类型转换等级最高的数据类型,就是运算结果的数据类型。
  • 整数运算时,若参与运算的两个数据是byte或short类型,运算的结果是int类型。
  • 字符串连接符:'+'运算符两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转换为字符串然后再进行连接。

示例:

System.out.println(2 + 1);//3
System.out.println(2 - 1);//1
System.out.println(2 * 1);//2
System.out.println(2 / 1);//2
System.out.println(2 + (double)1);//3.0




Ⅱ、取模运算

  • 取模运算是二元运算符,语法:var % var

  • 其操作数可以为浮点数,一般使用整数。

  • 取模运算与取余运算类似,运算结果是前一个数值被后一个数值整除后多余的值。区别在于对负整数进行除法运算时操作不同,取模运算的方式是:

    • 负数 % 负数 = 负数
    • 负数 % 正数 = 负数
    • 正数 % 负数 = 正数
    • 正数 % 正数 = 正数

示例:

System.out.println(-3 % -2);//-1
System.out.println(-3 % 2);//-1
System.out.println(3 % -2);//1
System.out.println(3 % 2);//1




Ⅲ、自增自减

  • 自增(++)自减(--)运算符是一元运算符。
  • 分为前缀自增自减法后缀自增自减法 两种:前缀先进行自增或者自减运算,再进行表达式运算;后缀先进行表达式运算,再进行自增或者自减运算。
  • 其操作数可以为浮点数,一般使用整数。

语法:

  1. 前缀自增:++var
  2. 前缀自减:--var
  3. 后缀自增:var++
  4. 后缀自减:var--

示例:

int num = 1;
System.out.println(num++);//1
System.out.println(num);//2
System.out.println(num--);//2
System.out.println(num);//1
System.out.println(++num);//2
System.out.println(num);//2
System.out.println(--num);//1
System.out.println(num);//1




二、赋值运算符

  • '=',简单的赋值运算符,将右操作数的值赋给左侧操作数。

语法:var = value




三、关系运算符

  • 关系运算符用于对两个操作数进行比较,返回结果位为布尔值。
  • 该运算符用于操作对象实例,检查该对象是否是一个特定类型(类类型或接口类型)。

语法:

  1. 是否相等:var == var
  2. 是否不等:var != var
  3. 是否大于:var > var
  4. 是否小于:var < var
  5. 是否大于或等于:var >= var
  6. 是否小于或等于:var <= var
  7. instanceof运算符:object instanceof type

示例:

System.out.println(1 == 2);//false
System.out.println(1 != 2);//true
System.out.println(1 > 2);//false
System.out.println(1 < 2);//true
System.out.println(1 >= 2);//false
System.out.println(1 <= 2);//true
System.out.println("" instanceof String);//true




四、逻辑运算符

  • 逻辑运算符用于对布尔类型的数据进行运算,运算结果也为布尔类型。
  • 逻辑与运算符(&&)和逻辑或运算符(||)为二元运算符,逻辑非运算符(!)为一元运算符。
  • 逻辑与运算符,当且仅当两个操作数都为 true,结果才为 true
  • 逻辑或运算符,如果任何两个操作数任何一个为 true,结果为 true
  • 逻辑非运算符,用来反转操作数的逻辑状态,如果操作数为true,则逻辑非运算符将得到false。

语法:

  1. 逻辑与运算符:booleanVar && booleanVar
  2. 逻辑或运算符:booleanVar || booleanVar
  3. 逻辑非运算符:!booleanVar

注意:

  • 逻辑与运算和逻辑或运算采用短路 的方式:
    1. 逻辑与(&)运算时,若第一个操作数为false,则跳过第二个操作数的布尔值判断,直接返回结果为false。
    2. 逻辑或(||)运算时,若第一个操作数为true,则跳过第二个操作数的布尔值判断,直接返回结果为true。

示例:

System.out.println(true && true);//true
System.out.println(true && false);//false
System.out.println(false && false);//false
System.out.println(true || true);//true
System.out.println(true || false);//true
System.out.println(false || false);//false
int num = 1;
System.out.println(false && (num++ > 0));//false
System.out.println(num);//1
System.out.println(true || (num++ > 0));//true
System.out.println(num);//1




五、位运算符

  • 位运算符应用于整数类型(int),长整型(long),短整型(short),字符型(char),和字节型(byte)等类型。
  • 位运算符作用在所有的位上,并且按位运算。
  • '~'是一元运算符,其余都是二元运算符。
  • 位操作是程序设计中对位模式按位或二进制数的一元和二元操作。在许多古老的微处理器上,位运算比加减运算略快,通常位运算比乘除法运算要快很多。在现代架构中,情况并非如此:位运算的运算速度通常与加法运算相同(仍然快于乘法运算)。

作用:

  1. 与(&):如果相对应位都是1,则结果为1,否则为0。
  2. 或(|):如果相对应位都是 0,则结果为 0,否则为 1。
  3. 异或(^):如果相对应位值相同,则结果为0,否则为1。
  4. 非(~):按位取反运算符翻转操作数的每一位,即0变成1,1变成0。
  5. 左移(<<):按位左移运算符,左操作数按位左移右操作数指定的位数。
  6. 右移(>>):按位右移运算符,左操作数按位右移右操作数指定的位数。
  7. 无符号右移(>>>):按位右移补零操作符,左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。

语法:

  1. 与(&):var & var
  2. 或(|):var | var
  3. 异或(^):var ^ var
  4. 非(~):~var
  5. 左移(<<):var << integer
  6. 右移(>>):var >> integer
  7. 无符号右移(>>>):var >>> integer

示例:

int num60 = 0B0011_1100;
int num13 = 0B0000_1101;
System.out.println(num60 & num13);//12:0000 1100
System.out.println(num60 | num13);//61:0011 1101
System.out.println(num60 ^ num13);//49:0011 0001
System.out.println(~num60);//-61:1100 0011
System.out.println(num60 << 2);//240:1111 0000
System.out.println(num60 >> 2);//15:1111
System.out.println(num60 >>> 2);//15:0000 1111




六、条件运算符

  • 三元条件运算符,有三个操作数,并且需要判断布尔表达式的值。
  • 该运算符的主要是决定哪个值应该作为结果赋值给变量。

语法:type var = expression ? valueIfTrue : valueIfFalse

示例:

int number = 1;
int numResult = number > 0 ? 10 : 20;
System.out.println(numResult);//10
numResult = number < 0 ? 10 : 20;
System.out.println(numResult);//20




七、扩展赋值运算符

  • 用于简化代码的赋值运算符。
  • 当普通二元运算符的运算结果会赋值给左操作数的时候,可以用扩展赋值运算符进行简化。

作用:

  1. 加和赋值操作符(+=):把左操作数和右操作数相加赋值给左操作数。等价于:varLeft = varLeft + varRight
  2. 减和赋值操作符(-=):把左操作数和右操作数相减赋值给左操作数。等价于:varLeft = varLeft - varRight
  3. 乘和赋值操作符(*=):把左操作数和右操作数相乘赋值给左操作数。等价于:varLeft = varLeft * varRight
  4. 除和赋值操作符(/=):把左操作数和右操作数相除赋值给左操作数。等价于:varLeft = varLeft / varRight
  5. 取模和赋值操作符(%=):把左操作数和右操作数取模后赋值给左操作数。等价于:varLeft = varLeft % varRight
  6. 左移位赋值运算符(<<=):把左操作数左移位右操作数的值后赋值给左操作数。等价于:varLeft = varLeft << varRight
  7. 右移位赋值运算符(>>=):把左操作数右移位右操作数的值后赋值给左操作数。等价于:varLeft = varLeft >> varRight
  8. 按位与赋值运算符(&=):把左操作数和右操作数按位与后赋值给左操作数。等价于:varLeft = varLeft & varRight
  9. 按位异或赋值操作符(^=):把左操作数和右操作数按位异或后赋值给左操作数。等价于:varLeft = varLeft ^ varRight
  10. 按位或赋值操作符(|=):把左操作数和右操作数按位或后赋值给左操作数。等价于:varLeft = varLeft | varRight

语法:

  1. 加和赋值操作符(+=):varLeft += varRight
  2. 减和赋值操作符(-=):varLeft -= varRight
  3. 乘和赋值操作符(*=):varLeft *= varRight
  4. 除和赋值操作符(/=):varLeft /= varRight
  5. 取模和赋值操作符(%=):varLeft %= varRight
  6. 左移位赋值运算符(<<=):varLeft <<= varRight
  7. 右移位赋值运算符(>>=):varLeft >>= varRight
  8. 按位与赋值运算符(&=):varLeft &= varRight
  9. 按位异或赋值操作符(^=):varLeft ^= varRight
  10. 按位或赋值操作符(|=):varLeft |= varRight

示例:

int numberLeft = 1;
int numberRight = 2;
System.out.println(numberLeft += numberRight);//3
System.out.println(numberLeft -= numberRight);//1
System.out.println(numberLeft *= numberRight);//2
System.out.println(numberLeft /= numberRight);//1
System.out.println(numberLeft %= numberRight);//1
System.out.println(numberLeft <<= numberRight);//4
System.out.println(numberLeft >>= numberRight);//1
System.out.println(numberLeft &= numberRight);//0
System.out.println(numberLeft ^= numberRight);//2
System.out.println(numberLeft |= numberRight);//2




八、运算符优先级

  • 当多个运算符出现在一个表达式中,谁先谁后,就涉及到运算符的优先级别的问题。
  • 在实际使用时,可以多使用小括号 区分一长串表达式里的运算符优先级,提高代码的可读性。

列表(越往下优先级越低):

类别 操作符 关联性
后缀 () [] .(点操作符) 从左到右
一元 expr++ expr-- 从左到右
一元 ++expr --expr + - ~ ! 从右到左
乘性 * / % 从左到右
加性 + - 从左到右
移位 >> >>> << 从左到右
关系 > >= < <= 从左到右
相等 == != 从左到右
按位与 & 从左到右
按位异或 ^ 从左到右
按位或 | 从左到右
逻辑与 && 从左到右
逻辑或 || 从左到右
条件 ?: 从右到左
赋值 = += -= *= /= %= >>= <<= &= ^= |= 从右到左
逗号 , 从左到右




内容来源于网络如有侵权请私信删除

文章来源: 博客园

原文链接: https://www.cnblogs.com/conyoo/p/13863816.html

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!