java学习笔记(四)-运算符

喜夏-厌秋 提交于 2020-02-09 01:31:55

java学习笔记(四)-运算符

运算符

运算符是特殊的符号,它们对一个,两个或三个操作数执行特定的运算,然后返回结果。

在我们探索Java编程语言的运算符时,可能有助于您提前了解哪些运算符具有最高的优先级。下表中的运算符按优先顺序列出。运算符越靠近表格顶部,其优先级越高。具有较高优先级的运算符将在具有相对较低优先级的运算符之前进行评估。同一行上的运算符具有相同的优先级。当相同优先级的运算符出现在同一表达式中时,必须控制一个规则,然后首先评估哪个规则。除赋值运算符外,所有二进制运算符均从左向右求值;赋值运算符从右到左求值。

运算符名称 操作符
后缀 *expr*++ *expr*--
一元 ++*expr* --*expr* +*expr* -*expr* ~ !
乘除 * / %
加减 + -
按位移 << >> >>>
关系 < > <= >= instanceof
平等 == !=
按位与 &
按位异或 ^
按位或 |
逻辑与 &&
逻辑或 ||
逻辑或 ||
分配 = += -= *= /= %= &= ^== <<= >>= >>>=

某些运算符倾向于比其他运算符更频繁地出现。例如:
赋值运算符“ =”比未签名的右移运算符“ >>>

赋值,算术和一元运算符

简单赋值运算符

你将遇到的最常见的运算符之一是简单的赋值运算符“ =

int cadence = 0;
 int speed = 0;
 int gear = 1;

创建对象中所述, 此运算符还可用于对象以分配对象引用

算术运算符

Java编程语言提供了执行加法,减法,乘法和除法的运算符。

操作符 描述
+ 加法运算符(也用于字符串连接)
- 减法运算符
* 乘法运算符
/ 部门运营商
% 余数运算符

下面的程序 ArithmeticDemo测试算术运算符。

class ArithmeticDemo {

    public static void main (String[] args) {

        int result = 1 + 2;
        // result is now 3
        System.out.println("1 + 2 = " + result);
        int original_result = result;

        result = result - 1;
        // result is now 2
        System.out.println(original_result + " - 1 = " + result);
        original_result = result;

        result = result * 2;
        // result is now 4
        System.out.println(original_result + " * 2 = " + result);
        original_result = result;

        result = result / 2;
        // result is now 2
        System.out.println(original_result + " / 2 = " + result);
        original_result = result;

        result = result + 8;
        // result is now 10
        System.out.println(original_result + " + 8 = " + result);
        original_result = result;

        result = result % 7;
        // result is now 3
        System.out.println(original_result + " % 7 = " + result);
    }
}
1 + 2 = 3 
3-1 = 2 
2 * 2 = 4 
4/2 = 2 
2 + 8 = 10 
107 = 3

您还可以将算术运算符与简单的赋值运算符结合在一起以创建复合赋值

class ConcatDemo {
    public static void main(String[] args){
        String firstString = "This is";
        String secondString = " a concatenated string.";
        String thirdString = firstString+secondString;
        System.out.println(thirdString);
    }
}

使用方法与c/c++类似,这里不做过多阐述

一元运算符

一元运算符只需要一个操作数。

运算符 描述
+ 一元加号运算符;表示正值(但是没有这个,数字为正)
- 一元减运算符;否定表达式
++ 增量运算符;将值增加1
-- 递减运算符;将值减1
! 逻辑补码运算符;反转布尔值

以下程序 UnaryDemo测试一元运算符:

class UnaryDemo {

    public static void main(String[] args) {

        int result = +1;
        // result is now 1
        System.out.println(result);

        result--;
        // result is now 0
        System.out.println(result);

        result++;
        // result is now 1
        System.out.println(result);

        result = -result;
        // result is now -1
        System.out.println(result);

        boolean success = false;
        // false
        System.out.println(success);
        // true
        System.out.println(!success);
    }
}

可以在操作数(前缀)之前或之后(后缀)应用增量/减量运算符。

代码result++;++result;都将以result递增1 结尾。唯一的区别是前缀版本(++result)评估为增加的值,而后缀版本(result++)评估为原始值。如果您只是执行简单的增量/减量,则选择哪个版本都没有关系。但是,如果在较大表达式的一部分中使用此运算符,则选择的运算符可能会产生很大的不同。

class PrePostDemo {
    public static void main(String[] args){
        int i = 3;
        i++;
        // prints 4
        System.out.println(i);
        ++i;			   
        // prints 5
        System.out.println(i);
        // prints 6
        System.out.println(++i);
        // prints 6
        System.out.println(i++);
        // prints 7
        System.out.println(i);
    }
}

总结来说:++在前,先加后用,++在后,先用后加。

相等,关系和条件运算符

等价和关系运算符

相等和关系运算符确定一个操作数是否大于,小于,等于或不等于另一操作数。

运算符 解释
== 等于
!= 不等与
> 大于
< 小于
>= 大于等于
<= 小于等于

下面的程序 ComparisonDemo测试比较运算符:

class ComparisonDemo {

    public static void main(String[] args){
        int value1 = 1;
        int value2 = 2;
        if(value1 == value2)
            System.out.println("value1 == value2");
        if(value1 != value2)
            System.out.println("value1 != value2");
        if(value1 > value2)
            System.out.println("value1 > value2");
        if(value1 < value2)
            System.out.println("value1 < value2");
        if(value1 <= value2)
            System.out.println("value1 <= value2");
    }
}

输出:

value1 != value2
value1 <  value2
value1 <= value2

条件运算符

&&||运营商进行ANDOR在两个布尔表达式运算。这些运算符表现出“短路”行为,这意味着仅在需要时才评估第二个操作数。

运算符 解释
&& 条件与(一假必假)
|| 条件或(一真必真)
class ConditionalDemo1 {

    public static void main(String[] args){
        int value1 = 1;
        int value2 = 2;
        if((value1 == 1) && (value2 == 2))
            System.out.println("value1 is 1 AND value2 is 2");
        if((value1 == 1) || (value2 == 1))
            System.out.println("value1 is 1 OR value2 is 1");
    }
}

当出现**? : **时,我们可以视为if-then-else语句的简写,此运算符也称为*三元运算符,*因为它使用三个操作数。

例:如果someConditiontrue,则分配value1to 的值result。否则,分配value2to 的值result

class ConditionalDemo2 {

    public static void main(String[] args){
        int value1 = 1;
        int value2 = 2;
        int result;
        boolean someCondition = true;
        result = someCondition ? value1 : value2;

        System.out.println(result);
    }
}

因为someCondition为true,所以此程序在屏幕上打印“ 1”。如果它使您的代码更具可读性,请使用?:运算符而不是if-then-else语句。例如,当表达式紧凑且没有副作用(例如赋值)时。

类型比较运算符instanceof(及判断对象是否继承于父类)

instanceof操作者的对象进行比较,以指定类型。您可以使用它来测试对象是实现特定接口的类的实例,子类的实例还是类的实例。

以下程序 **InstanceofDemo**定义了一个父类(名为Parent),一个简单接口(名为MyInterface)以及一个从父类继承并实现该接口的子类(名为Child)。

class InstanceofDemo {
    public static void main(String[] args) {

        Parent obj1 = new Parent();
        Parent obj2 = new Child();

        System.out.println("obj1 instanceof Parent: "
            + (obj1 instanceof Parent));
        System.out.println("obj1 instanceof Child: "
            + (obj1 instanceof Child));
        System.out.println("obj1 instanceof MyInterface: "
            + (obj1 instanceof MyInterface));
        System.out.println("obj2 instanceof Parent: "
            + (obj2 instanceof Parent));
        System.out.println("obj2 instanceof Child: "
            + (obj2 instanceof Child));
        System.out.println("obj2 instanceof MyInterface: "
            + (obj2 instanceof MyInterface));
    }
}

class Parent {}
class Child extends Parent implements MyInterface {}
interface MyInterface {}

结果如下:

obj1 instanceof Parent: true
obj1 instanceof Child: false
obj1 instanceof MyInterface: false
obj2 instanceof Parent: true
obj2 instanceof Child: true
obj2 instanceof MyInterface: true

使用instanceof运算符时,请记住这null不是任何实例。

按位和移位运算符

  • Java编程语言还提供了对整数类型执行按位和移位操作的运算符。本节中讨论的运算符不太常用。因此,它们的覆盖范围很短;目的只是让您知道这些运算符的存在。

    一元按位补数运算符“ ~”反转位模式;它可以应用于任何整数类型,每个“ 0”为“ 1”,每个“ 1”为“ 0”。例如,a byte包含8位;将此运算符应用于位模式为“ 00000000”的值,会将其模式更改为“ 11111111”。

  • 有符号的左移位运算符“ <<”将位模式向左移位,而有符号的右移位运算符“ >>”将位模式向右移位。位模式由左操作数指定,移位位置的数量由右操作数指定。无符号右移运算符“ >>>”将零移位到最左位置,而之后的最左位置">>"取决于符号扩展名。

  • 按位运算&符执行按位与运算。

  • 按位运算^符执行按位异或运算。

  • 按位运算|符执行按位或运算。

下面的程序 BitDemo使用按位AND运算符将数字“ 2”打印到标准输出。

class BitDemo {
    public static void main(String[] args) {
        int bitmask = 0x000F;
        int val = 0x2222;
        // prints "2"
        System.out.println(val & bitmask);
    }
}

运算符摘要

简单赋值运算符

=		简单的赋值运算符

算术运算符

+		加法运算符(也用于用于字符串连接)
-		减法运算符
*		乘法运算符
/		分区运算符,余数运算符

一元运算符

+		一元加号运算符;表示正值(数字为 积极的,但是没有这个)
-		一元减运算符;取反
++		增量运算符;增量1的值
--		递减运算符;减量1的值
!       逻辑补码运算符,反转布尔值

等于和关系运算符

==		等于
!=		不等于
>		大于
>=		大于或等于
<		小于
<=		小于或等于

条件运算符

&&		条件与
||		条件或
?:		三元(简写为 if-then-else 声明)

类型比较运算符

instanceof		将对象与指定类型 

按位和移位运算符

〜		一元按位补码
<<		签署左移
>>		签署右移
>>>		无符号右移
&		按位与
^		按位异或
| 		按位或

问题与练习:运算符

问题

  • 考虑以下代码片段。该代码包含哪些运算符?

    >+
    
arrayOfInts [j]> arrayOfInts [j + 1]
  • 考虑以下代码片段。

    • 代码执行后in之后的值是什么?

      i是11,n是0。

    • 什么是最终值的in,如果不是使用后缀增量运算符(i++),您可以使用前缀版本(++i))?

      i是11,n是0。

int i = 10;
int n = i ++5;
  • 要反转的值,boolean您将使用哪个运算符?

    逻辑补运算符“!”。

  • 使用哪个运算符比较两个值,===

    ==操作被用于比较,并=用于分配。

  • 解释以下代码示例:

    该代码应读为:“如果someConditiontrue,则将value1to result的值赋值。否则,将value2to 的值赋值result。”

    result = someCondition ? value1 : value2;
    

码执行后in之后的值是什么?

>`i`是11,`n`是0。
  • 什么是最终值的in,如果不是使用后缀增量运算符(i++),您可以使用前缀版本(++i))?

    i是11,n是0。

int i = 10;
int n = i ++5;
  • 要反转的值,boolean您将使用哪个运算符?

    逻辑补运算符“!”。

  • 使用哪个运算符比较两个值,===

    ==操作被用于比较,并=用于分配。

  • 解释以下代码示例:

    该代码应读为:“如果someConditiontrue,则将value1to result的值赋值。否则,将value2to 的值赋值result。”

    result = someCondition ? value1 : value2;
    
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!