6_JavaSE_运算符

1. 运算符简介

Java 中运算符与大部分主流的高级语言大同小异。所以,如果你有一定的编程基础的话,学起来会觉得相对比较容易。而且,即使你没有编程基础,但有一定的数学基础的话,学起来也会觉得相对轻松。
运算符本质是用来操作变量进行运算的一些符号,并且根据功能不同可以分为 算术运算符关系运算符位运算符逻辑运算符赋值运算符其他运算符这几类。

2. 算术运算符

算术运算符的作用就类似于我们数学中的运算符号,功能基本也是相对应的。
+ 加法(将符号左右两边的操作数相加)
- 减法(符号左边的操作数减掉符号右边的操作数)
* 乘法(将符号左右两边的操作数相乘)
/ 除法(符号左边的操作数除以符号右边的操作数)
% 取余(符号左边的操作数除以右边的操作数数后的余数)
++ 自增(将操作数的值增加1(操作数可以在左边或者在右边))
-- 自减(将操作数的值减少1(操作数可以在左边或者在右边))

测试代码:


public class Test {
    public static void main(String[] arg){
        int a = 13;
        int b = 4;
        System.out.println("a + b = "+(a + b));
        System.out.println("a - b = "+(a - b));
        System.out.println("a * b = "+(a * b));
        System.out.println("a / b = "+(a / b));
        System.out.println("a % b = "+(a % b));
        System.out.println("a++ ="+(a++));
        System.out.println("a-- ="+(a--));
        System.out.println("++a ="+(++a));
        System.out.println("--a ="+(--a));
    }
}

运行结果:

a + b = 17
a - b = 9
a * b = 52
a / b = 3
a % b = 1
a++ =13
a-- =14
++a =14
--a =13

从运算结果可以知道加减乘和数学中几乎一样,而除法则是会分出商和余数两部分,商是除法的结果,余数是取余的结果。而对于自增和自减,虽然都是将操作数加一或者减一,但操作数在前或者在后结果却不一样。简单说就是:操作数在前,先运算表达式,再自增或自减;操作数在后,先自增或自减,再进行表达式的运算。
回到上面的例子,我们看到一开始 a 等于 13 ,b 等于 4。进行 a++ 操作时,操作数在前,因此会先对该表达式赋值为自增之前的值,即表达式的值为 a 的值,即 13,接着再进行自增,对 a 自增后 a 的值为 14;然后计算 a-- ,此时,操作数仍在前,同理,表达式结果为 14,自减后 a 的值为 13; 接着计算 ++a ,先自增,自增后 a 的值为 14,再为表达式赋值,此时表达式的值为 14;最后计算 --a ,同样是先自减,此时 a 的值为 13,再计算表达式的值,即输出 13 。

补充:有人问到关于除法中操作数带负号时运算结果是否与数学中一致?答案是一致的。同样也有人问那取余呢?取余时带符号可以看看以下例子。

public class Test {
    public static void main(String[] arg){
        int a = 13;
        int b = 4;
        int c = -13;
        int d = -4;
        System.out.println(a%b);//1
        System.out.println(c%d);//-1
        System.out.println(a%d);//1
        System.out.println(c%b);//-1
    }
}

总结成一句话:取余运算符运算结果的符号和第一个操作数的符号一致。

3. 关系运算符

== 判断两个操作数是否相等,相等为真
!= 判断两个操作数是否不等,不等为真
> 判断左边的操作数是否大于右边的操作数,是为真
< 判断左边的操作数是否小于右边的操作数,是为真
>= 判断左边的操作数是否大于或者等于右边的操作数,是为真
<= 判断左边的操作数是否小于或者等于右边的操作数,是为真

4. 位运算符

位运算是将符号两边的操作数(有些符号只有一个操作数)化为二进制的形式,再按照符号的规则按位进行运算,运算之后将结果转化为十进制后输出。

& 操作数在左右两边 相对应位都为 1,则结果为 1,否则为 0
| 操作数在左右两边 相对应位都为 0,则结果为 0,否则为 1
^ 操作数在左右两边 相对应位相同,则结果为 0,否则为 1
~ 操作数在右边 将操作数相应位中 1 变为 0,0 变为 1
<< 操作数在左右两边 将左操作数按位左移右操作数(十进制)指定的位数
>> 操作数在左右两边 将左操作数按位右移右操作数(十进制)指定的位数
>>> 操作数在左右两边 将左操作数按位右移右操作数(十进制)指定的位数,移动得到的空位用 0 补齐。

5. 逻辑运算符

&& 操作数两边都为真,则为真,否则为假
|| 操作数两边都为假,则为假,否则为真
! 操作数为真,则为假;操作数为假,则为真

注意:&& 运算符在使用时,当第一个操作数的结果为 false,则直接判定结果为 false,即不会判断第二个操作数的值了(因为没必要了)。

6. 赋值运算符

= 将右操作数的值赋给左操作数
+= 把左操作数和右操作数相加赋值给左操作数
-= 把左操作数和右操作数相减赋值给左操作数
*= 把左操作数和右操作数相乘赋值给左操作数
/= 把左操作数和右操作数相除赋值给左操作数
%= 把左操作数和右操作数取模后赋值给左操作数
<< =对操作数进行左移运算后赋值给左操作数
>> =对操作数进行右移运算后赋值给左操作数
&= 对操作数进行按位与运算后赋值给左操作数
^= 对操作数进行按位异或运算后赋值给左操作数
|= 对操作数进行按位或运算后赋值给左操作数

7. 条件运算符

条件运算符有3个操作数,属于三元运算符。
条件运算符的语法如下:

操作数1 ? 操作数2 : 操作数3

操作数1的值为true时,执行操作数2;当操作数1的值为false时,执行操作数3

8. instanceof 运算符

作用:判断指定的对象是否是一个指定的类型(类、接口)
注意:前者只能是对象,后者只能是类或接口。
语法:

对象名 instanceof 类名/接口名

通常也可以用于判断某个变量是否属于某一类基本类型。

public static void main(String[] arg){
        int a = 13;
        Object object = a;
        System.out.println(object instanceof Integer);
    }

9. 运算符的优先级

既然 Java 中运算符这么多,那么当它们出现在一个表达式中时,我们应该按照什么顺序执行不同的运算符呢?以下就是规定好的运算符优先级,排的越高,最先运算;排的越低,最后运算。
注:
1、其中优先级为 2 的+和-表示正负;优先级为 4 的+和-表示加减;
2、. 的优先级为 1(如图),一般是表示包名、类名、方法名、变量名之间的分隔符号。如:Math.sin(3.3); 的点。
6_JavaSE_运算符_第1张图片

10. 总结

运算符以及它们的优先级,理解起来并不是很难,难是难在记忆和运用。熟练掌握需要花费一定时间去实践。下节讲循环语句。

你可能感兴趣的:(Java文章杂谈,算法,动态规划,java)