/**
* Java 运算符
* Java基本数据类型的运算符:算术运算符、赋值运算符、关系运算符、逻辑运算符、条件运算符、位运算符
* 算术运算符:
* 操作符 描述
* + 加法 - 相加运算符两侧的值
* - 减法 - 左操作数减去右操作数
* * 乘法 - 相乘操作符两侧的值
* / 除法 - 左操作数除以右操作数(注意:整数与整数相除,只保留整数部分)
* % 取余 - 左操作数除以右操作数的余数
* ++ 自增: 操作数的值增加1
* -- 自减: 操作数的值减少1
*
* 自增、自减运算:
* 前缀自增自减法(++i,--i): 先进行自增或者自减运算,再进行表达式运算
* 前置自增:++i:首先变量i 会先加1(i=i+1),然后把i加完以后的值,作为++i整个表达式的值。(如:i=1,++i=2,i=2)
* 前置自减:--i;首先i先减1(i=i-1),然后把减完以后的结果作为—i整个表达式的值。
* 后缀自增自减法(i++,i--): 先进行表达式运算,再进行自增或者自减运算
* 后置自增:i++:首先把i当前的值作为i++整个表达式的值,然后再给i加1。(如:i=1,i++=1,i=2)
* 后置自减:i--;首先i当前值作为i—整个表达式的值,然后i再减1(i=i-1)
* 数字和单个字符可以使用算术运算符。其中+,当用于字符串时,表示拼接。
*
* 赋值运算符:
* 操作符 描述 例子
* = 简单的赋值运算符,将右操作数的值赋给左侧操作数 C = A + B将把A + B得到的值赋给C
* += 加和赋值操作符,它把左操作数和右操作数相加赋值给左操作数 C += A 等价于C = C + A
* -= 减和赋值操作符,它把左操作数和右操作数相减赋值给左操作数 C -= A 等价于C = C - A
* *= 乘和赋值操作符,它把左操作数和右操作数相乘赋值给左操作数 C *= A 等价于C = C * A
* /= 除和赋值操作符,它把左操作数和右操作数相除赋值给左操作数 C /= A,C 与 A 同类型时等价于 C = C / A
* (%)= 取模和赋值操作符,它把左操作数和右操作数取模后赋值给左操作数 C %= A 等价于C = C%A
* <<= 左移位赋值运算符 C <<= 2 等价于C = C << 2
* >>= 右移位赋值运算符 C >>= 2 等价于C = C >> 2
* &= 按位与赋值运算符 C&= 2 等价于C = C&2
* ^= 按位异或赋值操作符 C ^= 2 等价于C = C ^ 2
* |= 按位或赋值操作符 C |= 2 等价于C = C | 2
* 注意:
* 所有的赋值运算符的=左边一定是一个变量
* 扩展赋值运算符=右边的计算结果的类型如果比左边的大的话会强制类型转换,所以结果可能有风险。
* 扩展赋值运算符的计算:(1)赋值最后算(2)加载数据的顺序是把左边的变量的值先加载,再去与右边的表达式进行计算
* 右边的常量值、表达式的值、变量的值的类型必须与左边的变量一致或兼容(可以实现自动类型转换)或使用强制类型转换可以成功。
*
* 关系运算符:
* 运算符 描述 例子(A的值为10,变量B的值为20)
* == 检查如果两个操作数的值是否相等,如果相等则条件为真。 (A == B)为假。
* != 检查如果两个操作数的值是否相等,如果值不相等则条件为真。 (A != B) 为真。
* > 检查左操作数的值是否大于右操作数的值,如果是那么条件为真。 (A> B)为假。
* < 检查左操作数的值是否小于右操作数的值,如果是那么条件为真。 (A <B)为真。
* >= 检查左操作数的值是否大于或等于右操作数的值,如果是那么条件为真。 (A> = B)为假。
* <= 检查左操作数的值是否小于或等于右操作数的值,如果是那么条件为真。 (A <= B)为真。
* 注意:比较表达式的运算结果一定只有true/false
* 比较表达式可以作为(1)条件(2)逻辑运算符的操作数
* 字符串判断相等的时候,不要用==。用 .equals()方法。
* java中进行基本数据类型比较的时候,比较的是直接存在内存中的值。
* 进行类类型(比如String)的时候,比较的是内存中的地址。
* 推荐写法:"roy".equals(s2);
* 其他的比较运算符都是只能用于8种基本数据类型。其中的==和!=可以用于引用数据类型的比较,用于比较对象的地址。
*
* 逻辑运算符:
* 逻辑运算符的操作数必须是布尔值,结果也是布尔值
* 逻辑与:&
* 运算规则:只有左右两边都为true,结果才为true。
* 例如:true & true 结果为true
* false & true 结果为false
* true & false 结果为false
* false & false 结果为false
* 逻辑或:|
* 运算规则:只要左右两边有一个为true,结果就为true。
* 例如:true | true 结果为true
* false | true 结果为true
* true | false 结果为true
* false | false 结果为false
* 逻辑异或:^
* 运算规则:只有左右两边不同,结果才为true。
* 例如:true ^ true 结果为false
* false ^ true 结果为true
* true ^ false 结果为true
* false ^ false 结果为false
* 逻辑非:!
* 运算规则:布尔值取反
* 例如:!true 为false
* !false 为true
* 短路与:&&
* 运算规则:只有左右两边都为true,结果才为true。
* 例如:true & true 结果为true
* true & false 结果为false
* false & ? 结果就为false
* 它和逻辑与不同的是当&&左边为false时,右边就不看了。
* 短路或:||
* 运算规则:只要左右两边有一个为true,结果就为true。
* 例如:true || ? 结果为treu
* false || true 结果为true
* false || false 结果为false
* 它和逻辑或不同的是当||左边为true时,右边就不看了。
*
* 条件运算符(?:):
* 条件运算符也被称为三元运算符。该运算符有3个操作数,并且需要判断布尔表达式的值。该运算符的主要是决定哪个值应该赋值给变量
* variable x = (expression) ? value if true : value if false
* 运算规则:整个表达式的结果:当条件表达式为true时,就取结果表达式1的值,否则就取结果表达式2的值
*
* 位运算符:
* 操作符 描述 例子( A 的值为 60 和变量 B 的值为 13)
* & 如果相对应位都是1,则结果为1,否则为0 (A&B),得到12,即0000 1100
* | 如果相对应位都是 0,则结果为 0,否则为 1 (A | B)得到61,即 0011 1101
* ^ 如果相对应位值相同,则结果为0,否则为1 (A ^ B)得到49,即 0011 0001
* 〜 按位取反运算符翻转操作数的每一位,即0变成1,1变成0。 (〜A)得到-61,即1100 0011
* << 按位左移运算符。左操作数按位左移右操作数指定的位数。 A << 2得到240,即 1111 0000
* 运算规则:左移几位就相当于乘以2的几次方
* >> 按位右移运算符。左操作数按位右移右操作数指定的位数。 A >> 2得到15即 1111
* 运算规则:右移几位就相当于除以2的几次方
* >>> 按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。 A>>>2得到15即0000 1111
* 运算规则:往右移动后,左边空出来的位直接补0,不看符号位
* 如何区分&,|,^是逻辑运算符还是位运算符?如果操作数是boolean类型,就是逻辑运算符,如果操作数是整数,那么就位运算符。
*
* instanceof 运算符
* 该运算符用于操作对象实例,检查该对象是否是一个特定类型(类类型或接口类型)。
* instanceof运算符使用格式如下:( Object reference variable ) instanceof (class/interface type)
* 例子:
* String name = "James";
* boolean result = name instanceof String; // 由于 name 是 String 类型,所以返回真
*
* Java运算符优先级:
* 下表中具有最高优先级的运算符在的表的最上面,最低优先级的在表的底部。
* 类别 操作符 关联性
* 后缀 () [] . (点操作符) 左到右
* 一元 expr++ expr-- 从左到右
* 一元 ++expr --expr + - ~ ! 从右到左
* 乘性 * /% 左到右
* 加性 + - 左到右
* 移位 >> >>> << 左到右
* 关系 > >= < <= 左到右
* 相等 == != 左到右
* 按位与 & 左到右
* 按位异或 ^ 左到右
* 按位或 | 左到右
* 逻辑与 && 左到右
* 逻辑或 || 左到右
* 条件 ?: 从右到左
* 赋值 = + = - = * = / =%= >> = << =&= ^ = | = 从右到左
* 逗号 , 左到右
*
* 优先级:
* 1、()最高
* 2、自增自减的运算符,是一元运算符(单目运算符)以及 !非运算和~按位取反运算。
* 3、四则运算 。
* 4、位移运算。 << >>
* 5、关系运算。 == != <=
* 6、逻辑运算。
* 7、赋值运算。
* 8、逗号。
*
*/