运算符是一种特殊的符号,用以表示数据的运算,赋值,比较等,java中有以下类型运算符
1.算数运算符
java支持所有的基本算术运算符,这里介绍7种基本算术运算符
+:加法运算符,字符串的连接符 -:减法运算符,求负运算符 *:乘法运算符 /:除法运算符 %:求余运算符 ++:自加运算符 --: 自减运算符 自加和自减: 1)自加和自减都是弹幕运算符,只能操作一个操作数,只能操作单个数值型的变量,不能操作常量或表达式 2)运算符可以出现在操作数左边或右边,如果运算符出现在左边,则先把操作数自增或自减再放入表达式中运算 如果运算符出现在操作数右边,则先进行表达式运算再自增自减 注意点: 1)除法运算的两个特殊性。a.如果两个操作数都是整数类型,则计算结果也是整数,就是将自然除法的结果截断取 整, 例如15/4的结果是3,不是4。两个操作数都是整数类型,则除数不能为0,否则引发算数异常。 b.如果两个操作数有一个或两个是浮点数,结果为自然除法的浮点数。而且此时允许除数可以为0或0.0,结果为正无穷大或负无穷大 2)求余的运算结果不一定是整数,它的计算结果是整除结果剩下的值。因为求余运算也经过除法运算,遵循除法运算的第一个特殊性。 但是如果两个操作数有一个以上是浮点数,第二个数值为0或0.0时,求余的结果是非数NaN。0或0.0对非0的任何数求余将得到0或0.0;
public static void main(String[] args) { double a = 5.2; double b = 3.1; System.out.println(a%b); System.out.println("5对0.0的求余结果是:"+5%0.0); System.out.println("0对5的求余结果是:"+0%5); System.out.println("0对5的求余结果是:"+0%5); System.out.println("0对0.0的求余结果是:"+0%0.0); //下面语句抛出异常 // System.out.println("5对0的求余结果是:"+5%0); int c = 5; int f = 5; int d = c+++3; int e = ++f+3; System.out.println(c); System.out.println(f); System.out.println(d); System.out.println(e); c = -c; System.out.println(c); }
输出:
2.1
5对0.0的求余结果是:NaN0对5的求余结果是:00对5的求余结果是:00对0.0的求余结果是:NaN6689-62.赋值运算符
java中支持"="号作为运算符,其格式为: 装入的变量=直接量或变量,java支持连续赋值,但可读性低不推荐
3.比较运算符
比较运算符通常用于比较两个变量或常量的大小,返回的结果为布尔值true或false
>:大于号。比较运算符左右两边数值类型的变量或常量是否左边大于右边
>:小于号。比较运算符左右两边数值类型的变量或常量是否左边小于右边
>=:大于等于号。比较运算符左右两边数值类型的变量或常量是否左边大于或等于右边
<=:大于等于号。比较运算符左右两边数值类型的变量或常量是否左边小 于或等于右边
==:等于号。 可以比较数值类型,boolean类型和引用类型。只有两个引用类型具有父子关系时
才可以比较,且指向同一个对象时才返回true。比较数值类型时,只要数值相等就返回true,
例如‘a'==97返回true
4.逻辑运算符
逻辑运算符操作两个布尔型的变量或常量
&&:与。前后两个操作数返回true才返回true &:不短路与。 ||:或。前后两个操作数返回false才返回false |:不短路或。 !:非。只有一个操作数。true的非操作为false,false的非操作为true ^:异或。操作数不同时返回true,相同时返回false 注意:对于&和&&的区别,都进行两个操作数的逻辑运算,当第一个操作数为false时,&&不会进行右边操作数的运算, 第二操作数被短路,但使用&仍然会执行第二个操作数的运算,第二个操作数不会被短路,但是最总返回的结果跟&& 一样。 |和||的区别解释同理
public static void main(String[] args) { System.out.println("!false的结果是"+!false); System.out.println(4>=5||'c'>'a'); System.out.println(4>=5^'c'>'a'); int a = 97; int b = 36; if(a>54 || ++a>97){ System.out.println(a);//a得不到自加运算 if(b>24 | ++b>36){ System.out.println(b);//b得到自加运算 } } }
输出:
!false的结果是true
truetrue97375.位运算符
java支持7个位运算符:&,|,~,^,<<,>>,>>>。一般来说,位运算符只能操作整数类型的变量或值
位运算符,都是计算机底层补码操作 &:按位与,当两位同时为1时才返回1 |:只要有一位为1时就返回1 ~:单目运算符,将操作数在计算机底层的二进制码的每个位全部取反 ^:按位异或,当两位相同时时返回0,不同时返回1 <<:左移运算符,移位后以0补充 >>:右移运算符,移位后以原符号位补充,也就是负数以1补充,正数以0补充 >>>:无符号右移运算符,移位后总是以0补充 进行移位运算遵循的规则 1)对于低于int类型(byte,char,short)的操作数,总是自动类型转换为int类型后在移位 2)对于int类型的整数移位a>>b,当b>32时,系统先将b对32求余(int类型数值32位), 得到的结果才是移动的位数,例如a>>33与a>1结果完全一致 3)对于long类型的整数移位a>>b,当b>>64时,也是移(b%64)位 4)对于<<和>>移位,把操作数左移n位,其结果等于操作数乘以2的n次方, 右移n位的结果等于操作数除以2的n次方,移位不会改变操作数本身
public static void main(String[] args) { System.out.println("5&9="+(5&9)); System.out.println("5|9="+(5|9)); System.out.println("~-5="+(~-5)); System.out.println("5^9="+(5^9)); System.out.println(5<<2); System.out.println(-5<<2); System.out.println(-5>>2); System.out.println(-5>>>3); int a=6; int b=a>>3; System.out.println(a+"右移3位后是"+b+",原操作数是"+a+",其本身并没有变"); }
输出:
5&9=1
5|9=13~-5=45^9=1220-20-25368709116右移3位后是0,原操作数是6,其本身并没有变
6.三目运算符
三目运算符只有一个?:,语法格式如下:(expression)?if-true stament : if-false stament
int c=11; int d=12; System.out.println(c>d?"c大于d":(c == d?"c等于d":"c小于d"));
输出:c小于d
7.扩展后的赋值运算符
赋值运算符可以跟算数运算符,移位运算符结合,扩展成为更强大的运算符。只要能使用这些扩展后的运算符,通常都推荐使用它们,不仅有更好的性能,而且程序更加健壮
+=:对于x+=y,相当于x=x+y;
-=:对于x-=y,相当于x=x-y;
*=:对于x*=y,相当于x=x*y;
/=:对于x/=y,相当于x=x/y;
%=:对于x%=y,相当于x=x%y;
&=:对于x&=y,相当于x=x&y;
|=:对于x|=y,相当于x=x|y;
^=:对于x^=y,相当于x=x^y;
<<=:对于x<<=y,相当于x=x<<y;
>>=:对于x>>=y,相当于x=x>>y;
^=:对于x^=y,相当于x=x^y;
>>>=:对于x>>>=y,相当于x=x>>>y;
8.运算符优先级