操作符
Posted songchj-bear
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了操作符相关的知识,希望对你有一定的参考价值。
java操作符包含以下几类:
赋值操作符:=
算数操作符: +, -, *, /, %
自增自减操作符:++, --
关系操作符:>, <, >=, <=, ==, !=
逻辑操作符:&&, ||, !
按位操作符:&, |, ~(非), ^(异或)
移位操作符:<<, >>, >>>
三元操作符:if -else
上述这些操作符基本都只用于操作基本类型。 =, ==, !=可以操作所有的对象, +, += 可以操作String。
操作符的优先级:只记住了 * / % 高于 + -,记不住的用()括起来,先计算
分别介绍下各个操作符用法
赋值操作符(=):
主要有两种情况操作基本类型,操作对象。
用例子来说明下:
public class Alias { int x; public static void main(String[] args) { int a = 1; int b = 2; System.out.println("a:" + a); System.out.println("b:" + b); a = b; System.out.println("a:" + a); System.out.println("b:" + b); a = 3; System.out.println("a:" + a); System.out.println("b:" + b); Alias alias1 = new Alias(); Alias alias2 = new Alias(); alias1.x = 1; alias2.x = 2; System.out.println("alias1.x=" + alias1.x); System.out.println("alias2.x=" + alias2.x); alias1 = alias2; System.out.println("alias1.x=" + alias1.x); System.out.println("alias2.x=" + alias2.x); alias1.x = 10; System.out.println("alias1.x=" + alias1.x); System.out.println("alias2.x=" + alias2.x); } }
结果:
a:1 b:2 a:2 b:2 a:3 b:2 alias1.x=1 alias2.x=2 alias1.x=2 alias2.x=2 alias1.x=10 alias2.x=10
把int类型换成String,会的到同样的结果,java中String类型是不可变的对象
总结:
当赋值语句操作基本类型和Sring时(或者说不可变类型),改变左值(等号左边的变量)不会影响右值(等号右边的变量);
当赋值语句操作对象时(可变的对象),改变左值,右值也会随之变化。
算数操作符(++, --):
运算方式和数学中的+ - * / %一样。java中可以和赋值操作符"="连接,如:+=, -=, 同时进行运算和赋值。
int a = 1; int b = 2; a += b;
自增自减操作符(++, --):
自身增加/减少一个单位,分为前缀式 ++a和后缀式a++ 两种。前缀式:加一后,然后使用a的值。后缀式:先使用a的值,然后a再加一。
int a = 1; int b = 2; System.out.println(++a + b); System.out.println(a++ + b);
输出:
4
4
关系操作符(>, <, >=, <=, ==, !=):
主要用于基本类型,用于对象可能会很难理解(两个对象比较大小,两个人如何比较大小,看名字,年龄吗?)或者产生无法预估的错误(即对象的值都相等,两个对象也不相等)。
逻辑操作符(&&, ||, !):
只能用来操作布尔值(true,false),java中不能用数值表示真假(python中非0表示真,0表示假)。
&&:都是真,则表达式为真
||:有一个为真,则表达式为真
!:操作数为假,则表达式为真;操作数为真,则表达式为假
短路:一旦能确认整个表达式的值,就不再计算余下部分。
第一次打印:a > 1 为false,整个表达式确定就是false,后面的++b > 2不会被执行(因为b的值没有变化,依然是2)
第二次打印:++b > 2 为true(b的值加一,变成3), a > 1 为false,整个表达式的值为false
int a = 1; int b = 2; System.out.println(a > 1 && ++b > 2 ); System.out.println("b=" + b); System.out.println(++b > 2 && a > 1); System.out.println("b=" + b);
输出:
false
b=2
false
b=3
按位操作符(&, |, ~(非), ^(异或)):
用来操作整数中的单个bit,对其做布尔运算,然后生成一个结果。
&:两个输入位都是1,则输出1
|:又有个输入位是1,则输出1
^:输入位相同(都是1,或者都是0),输出0;输入位不同,输出1;
~:取反操作,即输入位是1,则输出0;输入位是0,则输出1
可以和"="连起来使用,运算并赋值 &=, |=, ^= (~是一元运算符,不可以和=相连使用)
int a = 7; int b = 5; System.out.println("a = " + Integer.toBinaryString(a)); System.out.println("b = " + Integer.toBinaryString(b)); System.out.println("a & b = " + Integer.toBinaryString(a & b)); System.out.println("a | b = " + Integer.toBinaryString(a | b)); System.out.println("a ^ b = " + Integer.toBinaryString(a ^ b)); System.out.println("~a = " + Integer.toBinaryString(~a)); 输出: a = 111 b = 101 a & b = 101 a | b = 111 a ^ b = 10 ~a = 11111111111111111111111111111000
移位操作符(<<, >>, >>> ):
移位操作符的运算对象也是二进制的“位”。
<<:左移位操作符,把操作符左边的的数向左移动n位(n是操作符右边的数),低位补0
>>:“有符号”右移位操作符,把操作符左边的数向右移动n位(n是操作符右边的数),若符号为正,则高位补0;若符号为负,则高位补1。
>>>:“无符号”右移位操作符,无论正负,都在高位补0
移位操作符可以"="组合使用, <<=, >>=, >>>=
说明:java中没有无符号的数,即所有的数都区分正负
int a = 7; int b = -7; System.out.println("a = " + a + ", " + Integer.toBinaryString(a)); System.out.println("b = " + b + ", " + Integer.toBinaryString(b)); System.out.println("a << 2 = " + (a << 2) + ", " + Integer.toBinaryString(a << 2)); System.out.println("b << 2 = " + (b <<2 ) + ", " + Integer.toBinaryString(b << 2)); System.out.println("a >> 2 = " + (a >> 2) + ", " + Integer.toBinaryString(a >> 2)); System.out.println("a >>> 2 = " + (a >>> 2) + ", " + Integer.toBinaryString(a >>> 2)); System.out.println("b >>> 2 = " + (b >>> 2) + " , " + Integer.toBinaryString(b >>> 2)); 输出: a = 7, 111 b = -7, 11111111111111111111111111111001 a << 2 = 28, 11100 b << 2 = -28, 11111111111111111111111111100100 a >> 2 = 1, 1 a >>> 2 = 1, 1 b >>> 2 = 1073741822 , 111111111111111111111111111110
三元操作符(if-else):
boolean-exp ? exp1 : exp2
如果boolean-exp为true,计算exp1的值,否则计算exp2的值
以上是关于操作符的主要内容,如果未能解决你的问题,请参考以下文章