Java_操作符

操作符

操作符接受一个或多个参数, 并生成一个新的值.

操作符的优先级

优先级从上到下依次递减

[ ] . ( ) (方法调用)	从左向右
:: (方法引用) 
! ~ ++ -- +(一元运算) -(一元运算)	从右向左
* / %	从左向右
+ -	从左向右
<< >> >>>	从左向右
< <= > >= instanceof	从左向右
== !=	从左向右
&	从左向右
^	从左向右
|	从左向右
&&	从左向右
||	从左向右
?:	从右向左
=   从右向左

赋值操作符:

对于基本数据类型:

  • 取右边值, 复制给左边.
  • 右边值可以为任何常数, 表达式, 变量, 只要可以产生一个值
  • 左边必须是一个明确的已命名变量, 不许有实际的物理空间可以存储.
  • 常数不可以被赋值.

对于对象:

  • 首先明确, 我们操作的只是对象的引用, 实际上我们只能操作对象的引用.
  • 即对象的赋值是吧对象的引用从一个地址复制到另一个地址
  • 两个引用可以同时操作同一个对象的现象, 称作别名现象.
  • 别名现象在方法参数传递时也会出现, 相反, 也可以被很好地利用. 比如你可以重构出一段不需要返回值的代码, 对调用这段代码的方法里的一些对象直接进行操作. 这样做的时候需要注意代码设计的风格和一致性.

算术操作符:

  • 整数除法直接去掉余数, 没有四舍五入操作
  • 运算符赋值可以作用于所有算术操作符, 在其后添加"="即可, 比如
    • a += b 等价于 a = a + b

递增与递减

  • b = a++ 等价于
    • b = a;
    • a = a + 1;
  • b = --a 等价于
    • a = a - 1
    • b = a;

关系操作符

比较左右两边的值, 生成boolean结果

逻辑操作符

与: &&
或: ||
非: !
根据逻辑关系产生布尔值.

注意
短路操作: 比如有如下表达式

  • (test(a) && test(b))
  • 如果test(a)为假, 则test(b)不会执行

按位操作符

用于操作int中的单个比特(bit), 或者叫二进制位. 按位操作符对两个参数中对应的比特为执行布尔运算, 并最终生成一个结果. 通常面向于操作底层.

  • 与&: 两个输入位都是1, 才输出1
  • 或|: 只要有一个输入位是1, 就输出1
  • 异或^: 两个输入的所有二进制位都不相同时, 才输出1
  • 取反~(一元操作符, 只有一个输入): 输入位为0, 输出1, 反之输出0.

移位操作符

依然操作二进制位, 只能用于int.

  • 左移操作符<<: 操作符右侧为要移动的位数, 左侧为操作数. 表示将操作数位为1的所有为位同时向左移动多少位.
    • 规则: 丢弃最高位, 0补最低位.
    • 在没有超位的情况下, 移动了多少位就相当于对操作数*2的(移动位数)的次方:
      • 设a = 3, b = 6
      • a转为二进制为: 0000 0000 0000 0000 0000 0000 0000 0011
      • c = a << b, c 的二进制为0000 0000 0000 0000 0000 0000 1100 0000,
      • 1100 0000转为十进制为192
    • 超位的情况下:
      • a = 999, b = 31
      • a的二进制: 0000 0000 0000 0000 0000 0011 1110 0111
      • c = a << b, c的二进制为1000 0000 0000 0000 0000 0000 0000 0000
      • c转为十进制为: -2147483647
      • 当所有补位都为0时, 也就是移动位数等于该类型的长度时, 还原所有二进制位
      • 当移动位数大于32位时, 从左开始继续向左移动位数 - 32位
  • 右移操作符>>(有符号位):
    • 向右移动操作数n位, 如果符号位为0, 则补0, 反之补1
    • 右移操作相当于一个数除以2的n次方
  • 右移操作符(无符号位):
    • 不论符号位是什么, 直接补0
  • 如果对char, byte, short类型的数值移位, 则在计算之前将被首先转换成int类型, 返回的结果也是int.
  • 移位赋值操作符:
    • <<=, >>=, >>>=
    • 可以与等号联用, 等价于先计算再赋值.

三元条件操作符

boolean-exp ? value0 : value1
布尔表达式为真时, 将value0赋值给最右端, 否则将value1赋值给最右端.

字符串操作符

string1 = string1 + string2, string1 += string2
以上两句语义相同. 但是需要注意, 如果表达式以字符串起头, 则后续必须为字符串, 双引号内的也被自动转成字符串, 加入后续出现了对象, 则自动调用对象的toString方法.

直接常量和后缀字符

直接常量后缀字符标示了他的类型。L代表long,F代表float,D代表double。

十六进制数适用于所有整数数据类型。前缀以0x后面跟随0-F表示(此处为该数据类型最大值)

八进制数据类型则以0-7的数字表示。

二进制数直接用其他变量调用integer和long类的静态方法toBineryString()转化。

指数计数法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值