整形和浮点型相比,浮点型的范围更大,所以在Java中正常条件下都是整形隐式转换为浮点型(任意整形都可以隐式转换为double或者float),浮点型不能隐式转换为整形。
1.算术运算符
1. 基本四则运算符:加减乘除模(+ - * / %)
加减乘都很简单,就不说了。我们从除和模开始说。
做除法和取模时,右操作数不能为0
除法跟我们在c语言中学的一样。
% 不仅可以对整型取模,也可以对double类型取模,但是没有意义,一般都是对整型取模的。(c语言中%只能作用于整数)
下图是对浮点型进行取模:
System.out.println(11.5 % 2.0);
// 运行结果
1.5
%对整数进行取模 跟c语言一样。
2. 增量运算符 += -= *= %=
跟c语言中用法一样。
只不过这里要说一个点。
int a=3;
a/=1.5;
system.out.println(a)//输出2
这里有个疑问,右边得到2.0,而要将其赋值给整形,在正常条件下整形是不能隐式转换为浮点型的,如果要输出2则要强制转换。
而我们这里却输出了2,证明对于增量运算符能将其值自动隐式转换赋给左边的值(就算类型大的数据类型隐式转换为类型小的数据类型这种在正常条件下不能发生的事到了自增运算符这就能发生)
所以增量运算符为了赋值成功能实现正常条件下实现不到的隐式转换(类型大转换为类型小)
3.自增/自减运算符 ++ --
java的这些跟c语言的一样。
这里再说一个有意思的点。
int a=10;
a=a++;
system.out.printfln(a)//输出10
这是在java中会输出10,而在C语言中(vs系统)会输出11,这就是c语言和java的不同。而造成这个现象的原因太深层了,这里就不讲了(作者也不懂。。。),你只要记住这个现象就可以了。
2.关系运算符
记住在java中,true和false 跟整形是没关系的不能互相转化,所以连着写时得出来的true或者false不能和整形比较,就会发生错误导致编译失败。
3. 逻辑运算符
这些都在c语言中讲过。 这里说几点:
1. !不能作用于整形,只能作用于boolean。(这在c语言中行得通在java中行不通)
2. 对于短路求值在c语言中讲过,java这里多出了一点新东西:
&和|也可以用作逻辑运算,但因为没有短路求值所以不推荐。
4.位运算符
位运算符主要有四个: & | ~ ^ ,除 ~ 是一元运算符外,其余都是二元运算符。
位操作表示按二进制位运算. 计算机中都是使用二进制来表示数据的(01构成的序列), 按位运算就是0在按照二进制位的每一位依次进行计算
c语言中已经讲过了这四个位运算符,跟java的基本一样,这里不会再详细讲述 , 看一下下面文案就行。
5.移位运算符
移位运算符有三个: << >> >>> ,都是二元运算符,且都是按照二进制比特位来运算的。
1. 左移 << :最左侧位不要了, 最右侧补 0.
2. 右移 >>: 最右侧位不要了, 最左侧补符号位(正数补0, 负数补1)
3.无符号右移 >>>: 最右侧位不要了, 最左侧补 0.(无论正负都补0)
这里跟c语言有点像,c语言有逻辑右移和算术右移,但其由编译系统决定,都是>>。
而java巧妙的将其分开了,分为右移>>和无符号右移>>> .
由于计算机计算移位效率高于计算乘除, 当某个代码正好乘除 2 的N次方的时候可以用移位运算代替.(不要移位过多导致数据丢失从而算错)
6.条件运算符
条件运算符只有一个: 表达式1 ? 表达式2 : 表达式3
当表达式1 的值为 true 时, 整个表达式的值为表达式2 的值;
当 表达式1 的值为 false 时, 整个表达式的值为表达式3 的值.
也是Java 中唯一的一个 三目运算符, 是条件判断语句的简化写法.
注意事项:
1.表达式2和表达式3的结果要是相同类型的,如果是两个不同类型的,除非两者之间有一个具备能隐式转换变为跟另一个相同类型的条件,否则不能填上去
2.表达式不能单独存在,其产生的结果必须要被使用。否则会发生错误
7.运算符的优先级
因为运算符之间是有优先级的. 而我们要记其具体的规则太麻烦了,我们大可不必记住它们.我们可以在可能存在歧义的代码中加上括号也能实现一样的效果.