算术运算符
算术运算符就是进行算术运算的,它包含:+,-,*,/,%,++,--
加减乘除我们都非常的了解,我们直接列举一段代码就明白了
int a = 10;
int b = 20;
System.out.println(a + b);//30
System.out.println(a - b);//-10
System.out.println(a * b);//200
System.out.println(a / b);//0
上述代码就是演示了加减乘除的结果,a+b为30,a-b为-10,a*b为200,但是a/b我们却得到了0,我们清楚的知道a/b的结果为0.5,但是程序却显示为0,这就涉及到类型转换的问题,我们的a和b都是int类型,所以它们的运算结果也是int类型,程序就只保留了整数部分,所以结果为0。
%
就是取余数,我们还是利用代码来进行演示:
int a = 25;
int b = 10;
System.out.println(a % b);//5
本段代码的运行结果为5,%运算符的意思就是计算a除以b的余数,25/10=2......5
++
是一个单目运算符,它对一个变量起作用,简称自增,就是在该变量的基础上加一并且对该变量重新赋值为计算后的结果。
--
也是一个单目运算符,它对也是对一个变量起作用,简称自减,就是在该变量的基础上减一并且对该变量重新赋值为计算后的结果。
这两个单目运算符所放的位置也有不一样的结果,a++
和++a
是有区别的,如果一句代码中只有a++
或者++a
,那么它们就是一样的,否则不一样,例子如下:
int a = 1;
int b = 1;
System.out.println(a++);//1
System.out.println(a--);//2
System.out.println(a);//1
System.out.println(++b);//2
System.out.println(--b);//1
System.out.println(b);//1
我们看到输出的a++是1,但是输出的a–却是2,再然后输出的a又是1,其实我们先输出的a++是只输出了a,而且是还没有进行自增后的a,所以是1,当他输出后,a的值就已经自增变成了2,所以a–输出的也是还未进行自减的a,结果为2,输出后,a自减,变成了1,所以后面输出的a为1。
我们看到输出的++b是2,但是–b是1,b也是1。我们对它进行分析,打印的++b结果是2,就是b先进行了自增,然后才打印输出,所以为2,–b也是,先自减为1,所以打印出1,后面b的输出为1。
自增自减的运算符放置的位置影响了它的运行,自增自减放在前面就先进行自增自减计算,放后面就后进行自增自减运算。
赋值运算符
在Java中,赋值运算符就是用来赋值的运算符,采用=
,例如程序中的int a = 10;
,就是把10这个值赋值给类型为int的变量a。
关系运算符
关系运算符包含:<,>,<=,>=,==,!=
,关系运算符都属于双目运算符,它是用来计算两个变量之间的关系的,它的运算结果都为布尔值,要么是false要么是true。
<
:小于
>
:大于
<=
:小于等于
>=
:大于等于
==
:等于
!=
:不等于
int a = 1;
int b = 2;
System.out.println(a < b);//true
System.out.println(a > b);//false
System.out.println(a <= b);//true
System.out.println(a >= b);//false
System.out.println(a == b);//false
System.out.println(a != b);//true
我们可以看到a<b的值为true,因为a是小于b的,所以它的值为true真,反之a>b的值就为false假。a<=b,就是判断a小于或者等于b的,它的值为true真。a>=b就是判断a大于或者等于b的,它的值为false假。a==b,就是判断a是不是等于b,结果为false,就是a和b不相等,a!=b就是判断a是不是不等于b,结果为true。
逻辑运算符
逻辑运算符,顾名思义就是进行逻辑运算的符号,在博主看来,就是用来计算真和假的运算,它包含了与(&,&&),或(|,||),非(!)三个逻辑运算符。
与(and):与符号两边的都要是true,结果才为true,其它均为false。
或(or):或符号两位都是false,结果才为false,其它均为true。
非(not):true的非就是false,false的非就是true。
int a = 1;
int b = 2;
System.out.println((a > b) & (a < b));//false
System.out.println((a > b) && (a < b));//false
System.out.println((a < b) | (a > b));//true
System.out.println((a < b) || (a > b));//true
System.out.println(!(a > b));//true
接下来博主演示一下&和&&,还有|和||的区别:
int a = 1;
int b = 10;
System.out.println((a > b) & (a++ < b));//false
System.out.println(a);//2 表示上一句的a++起效了
System.out.println((a > b) && (a++ < b));//false
System.out.println(a);//2 表示上一句的a++无效
System.out.println((a < b) | (a++ > b));//true
System.out.println(a);//3 表示上一句的a++起效了
System.out.println((a < b) || (a++ > b));//true
System.out.println(a);//3 表示上一句的a++无效
其实上述代码的结果就已经展示了他们的不同,&和&&都是与运算,后者又可以叫做短路与运算符,&不论怎样都会对两边的代码都执行,但是&&在遇到左边结果为false时,就不会再执行右边的代码,直接返回结果false,我们明白,在进行与运算的时候,需要两边都是true时,结果才为true,其他结果都是false,这样遇到左边是false时,就能判断出结果一定为false,所以没有必要对右边的代码执行,这样的效率更高。
同理,|和||都是或运算,后者也可以叫做短路或,|不论在什么情况下,两边的代码都会执行,但是||在遇到左边为true的时候,直接就返回结果为true,右边的代码就不会被执行。
所以,上面的代码就得到了自然的解释。
位运算符
位运算符包括:&,|,^,~,>>,<<,>>>
,这些运算符主要是对二进制的数进行操作,我们知道,计算机中对数据的存储就是二进制的,这些运算符对二进制的数进行直接操作,所以它的效率比普通的运算效率要高一些。
&
:与,只有1&1结果才是1,其余结果为0。
|
:或,只有0|0结果才为0,其余结果都为1。
^
:异或,相同为0,不同为1。
~
:非,~0为1
,~1为0
<<
:左移运算符,将运算符左边的对象向左移动运算符右边指定的位数,在低位补0。
>>
:"有符号"右移运算符,将运算符左边的对象向右移动运算符右边指定的位数。使用符号扩展机制,也就是说,如果值为正,则在高位补0,如果值为负,则在高位补1。
>>>
:"无符号"右移运算符,将运算符左边的对象向右移动运算符右边指定的位数。采用0扩展机制,也就是说,无论值的正负,都在高位补0。
int a = 0b10111111;//191的二进制
int b = 0b11001101;//205的二进制
//结果为141 二进制10001101
System.out.println(a&b);
//结果为255 二进制11111111
System.out.println(a|b);
//结果为114 二进制01110010
System.out.println(a^b);
//结果为-206 二进制11111111111111111111111100110010
System.out.println(~b);
//结果为764 二进制1011111100 后面多了两个0
System.out.println(a<<2);
//结果为51 二进制110011 后面少了01
System.out.println(b>>2);
//二进制11111111 11111111 11111111 11111111
int c = -1;
//二进制00000000 00000000 00000000 00000001
int d = 1;
//结果为2147483647 二进制01111111 11111111 11111111 11111111
//在原来数的基础上将所有的数向右移动一位,在首位加了0
System.out.println(c>>>1);
//结果为-1 二进制11111111 11111111 11111111 11111111
//在原来数的基础上将所有的数向右移动一位,本数为负数,所以在首位加了1
System.out.println(c>>1);
//结果为0 二进制00000000 00000000 00000000 00000000
//在原来数的基础上将所有的数向右移动一位,在首位加了0
System.out.println(d>>>1);
//结果为0 二进制00000000 00000000 00000000 00000000
//在原来数的基础上将所有的数向右移动一位,本数为正数,所以在首位加了0
System.out.println(d>>1);
我们发现程序所运行的结果与我们的理论一致,其实细心的朋友会发现,这个正好也对应了int的取值范围,我们知道int占了4个字节,就是32为二进制数,所以我们在对int类型的二进制数操作时,有的地方就会直接产生误差。
条件运算符
条件运算符就是我们常使用的三目运算符,它能够简化if~else语句
,它的基本结构为a?b:c
,a为判断语句其返回的结果为布尔值,就是如果a为true,则运行b,否则运行c。
int score1 = 60;
String grade1 = score1 < 60 ? "不及格" : "及格";
System.out.println(grade1);//及格
int score2 = 59;
String grade2 = score2 < 60 ? "不及格" : "及格";
System.out.println(grade2);//不及格
扩展赋值运算符
扩展的运算符就是简化后的运算符,其包含+=, -=, *=, /=, %=
,我们举一段程序为例:
int a = 10;
a += 2;//相当于a = a + 2
System.out.println(a);//12
a -= 1;//相当于a = a - 1
System.out.println(a);//11
a *= 3;//相当于a = a * 3
System.out.println(a);//33
a /= 3;//相当于a = a / 3
System.out.println(a);//11
a %= 10;//相当于a = a % 10
System.out.println(a);//1
如若发现博主有些写的不对的地方,还望多多包含,多多指出,相互交流,共同提升。