单目运算符操作一个数据,如+a、--c、!flag;双目运算符操作两个数据,如a+b、age>=18、a&&b;+、-符号依上下文可单可双;++、--恒为单目;=和==均为双目;三目运算符独立分类。

区分单目和双目运算符,关键看它操作几个数据(操作数):只有一个操作数的是单目,有两个的是双目。
单目运算符:只作用在一个值上
这类运算符写在操作数的左边或右边,只影响一个变量或表达式。
-
正负号:如
+a、-b,对单个数值取正或取负 -
自增/自减:如
a++、--c,不管前置还是后置,都只针对一个变量做加1或减1 -
逻辑非:如
!flag,对一个布尔值取反 -
按位取反:如
~x,对一个整数的每一位翻转
双目运算符:必须连接两个值
它们夹在两个操作数中间,构成“左操作数 运算符 右操作数”的结构。
-
算术类:如
a + b、x * y、m % n,都需要左右各一个数 -
关系类:如
age >= 18、str == null,比较两个值的大小或相等性 -
逻辑与/或:如
valid && enabled、a || b,两边都是布尔表达式 -
位运算:如
p & q、flags | MASK,对两个整数的二进制位分别运算
容易混淆的点要注意
有些符号既是单目又是双目,得看上下文:
立即学习“Java免费学习笔记(深入)”;
-
+和-:单独用在数字前是单目(+5、-3),夹在两个数中间是双目(2 + 3、7 - 1) -
++和--:永远是单目,哪怕写成i++或--j,都只作用于一个变量 -
=是双目赋值运算符,但==是双目关系运算符,别把它们当成同一个东西
三目运算符是特例,不参与单双目区分
像 a > b ? x : y 这种有三个操作数的,属于独立一类,叫条件运算符。它不是双目,也不归入单目,不用拿来对比。


















