首页 > 编程语言 >重学Java-第六章 Java运算符

重学Java-第六章 Java运算符

时间:2023-02-15 12:00:54浏览次数:48  
标签:重学 Java 结果 System 运算符 && println out

6.1 算术运算符

​ Java 语言提供了执行加减乘除四则运算的运算符。 算数运算符被用在数学表达式中,可以使用任意嵌套的小括号,其作用与数学中相同。下表列出了算术运算符:

运算符 描述 例子
+ 加法运算符(也用于连接字符串) a+b
- 减法运算符 a-b
* 乘法运算符 a*b
/ 除法运算符 a/b
% 取余运算符 a%b
++ 自增运算符 a++
-- 自减运算符 a--

6.2 关系运算符

​ 关系运算符又称为比较运算符,比较的结果是一个布尔类型的值(true 或 false)。Java语言中有如下可用于变量比较的运算符(在例子中,初始化int a = 2; int b = 4):

运算符 描述 例子
== 相等 a==b,为假
!= 不等于 a != b,为真
> 大于 a > b,为假
< 小于 a < b,为真
>= 大于或等于 a >=b,为假
<= 小于或等于 a <= b,为真

6.3 位运算符

​ Java语言还提供了对整数类型执行按位和移位操作的运算符,称为位运算符。在实际的编码中位运算符并不常用。下表列出了位运算的基本运算:

运算符 描述
& 按位与,如果相对应位都是1,则结果为1,否则为0
| 按位或,如果相对应位都是0,则结果为0,否则为1
^ 按位异或,如果相对应位相同,则结果为0,否则为1
~ 按位取反,翻转操作数的每一位,即0变1,1变0
<< 按位左移,左操作数按位左移右操作数指定的位数,如a << 2
>> 按位右移,左操作数按位右移右操作数指定的位数,如a >> 2
>>> 零填充右移,按位右移补零操作符,左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充,如 a >>> 2

​ 案例如下:

public class Demo {
    public static void main(String[] args) {
        // a 的二进制表示:0000 0010      b的二进制表示:0000 0101
        int a = 2, b = 5;
        System.out.println(a & b);  // 0
        System.out.println(a | b);  // 7
        System.out.println(a ^ b);  //7
        System.out.println("取反运算结果"+~a);    // -3
        System.out.println(a << 2);     // 8
        System.out.println(b >> 2);     // 1
        System.out.println(a >>> 2);    // 0
    }
}

6.4 逻辑运算符

​ 逻辑运算符用来表示日常交流中的“并且”,“或者”,“除非”等思想。&(与)、|(或)、!(非)、&&(短路与)、||(短路或)、^(异或)都是java中的逻辑运算符,逻辑运算符可以在表达式中生成组合条件,例如在执行特定语句块之前必须满足的两个或多个条件。使用逻辑运算符可以描述这些组合,逻辑运算符的返回结果只能为真(true)或假(false)。具体用法见下表:

逻辑运算符 名称 示例 作用
& a & b a,b都为真,则结果为真,反之,a,b都为假,则结果为假
| a | b a,b有一个为真,则结果为真
!a a为真则结果为真,a为假则结果为假
&& 短路与 a && b a,b都为真,则结果为真
|| 短路或 a || b a,b有一个为真,则结果为真
^ 异或 a ^ b a,b都为真,或都为假时,结果为假

​ 实例如下:

public class Test {
  public static void main(String[] args) {
     boolean a = true;
     boolean b = false;
     System.out.println("a && b = " + (a&&b));
     System.out.println("a || b = " + (a||b) );
     System.out.println("!(a && b) = " + !(a && b));
  }
}

// 运行结果
/*
a && b = false
a || b = true
!(a && b) = true
*/

6.4.1 &和&&

	&与&&都表示逻辑与,它们的区别在于**`&`**需要判断左右两边的值才能确定整个表达式的值。而**`&&`**有时只需判断左边的值就可以确定整个表达式的值,`当左边的值为false时,就不需要判断右边的值了,此时整个表达式的值为false`。当左边的值为true时,此时需要判断右边的值了,若右边的值为true,此时整个表达式的值为true,若右边的值为false时,此时整个表达式的值为false。

​ 结合下面的代码可以有更好地理解:

public class Demo01 {
    public static void main(String[] args) {
        if (A() & C()) {        //A()方法和C()方法作逻辑与运算
            System.out.println("结果是真!!!");
        } else {
            System.out.println("结果是假!!!");
        }
    }

    public static boolean A() {
        System.out.println("我是方法A");
        return true;
    }

    public static boolean B() {
        System.out.println("我是方法B");
        return false;
    }

    public static boolean C() {
        System.out.println("我是方法C");
        return true;
    }
}

​ 上面的代码中定义了3个方法,A方法和C方法都返回true,B方法返回false,在主方法中使用if语句将A方法和C方法做逻辑与&运算,根据&的运算法则,需要判断左右两边的值才能确定整个表达式的值,A方法和C方法都为真,那么结果应该为真。执行结果如下:

​ 从执行结果可以看到,控制台输出了A方法和C方法中的输出语句,说明&左右两边都执行了,还输出了“结果为真”,说明两边为真则结果为真。

​ 同理,修改主方法中if语句中的表达式,将A方法和B方法做&运算,结果如下:

​ 说明左右两边有一边为假,则结果为假。

​ 交换if语句中A()和B()的位置,

public static void main(String[] args) {
        if (B() & A()) {
            System.out.println("结果是真!!!");
        } else {
            System.out.println("结果是假!!!");
        }
    }

​ 执行结果如下:

接下来我们看&&逻辑运算符

​ 修改主方法中if语句中的表达式,将A()方法和B()方法作&&(短路与)运算

public static void main(String[] args) {
        if (A() && B()) {
            System.out.println("结果是真!!!");
        } else {
            System.out.println("结果是假!!!");
        }
    }

​ 执行结果如下:

​ 将A()方法和B()方法位置调换:

public static void main(String[] args) {
        if (B() && A()) {
            System.out.println("结果是真!!!");
        } else {
            System.out.println("结果是假!!!");
        }
    }

​ 只是调换了一下位置,结果就不一样了。是因为&&运算符在判断左边的值时,左边的值为false,就不用判断右边的值了,整个表达式的值为false。所以只执行了B方法中的输出语句,A方法没有执行。可以对比上面的A()和B()做&运算的结果(下图),&运算左右两边都执行了,&&只执行了左边。

6.4.2 | 和 ||

​ | 和 || 都表示逻辑或,其用法跟&和&&差不多, || 的运算法则是当左边的值为true时,就不用判断右边了,整个表达式结果为tru。若左边为false,需要判断右边的值,右边为true,则整个表达式结果为true,右边为false,则则整个表达式结果为false。

	 结合代码理解,修改上面的代码:
public static void main(String[] args) {
        if (A() | B()) {
            System.out.println("结果是真!!!");
        } else {
            System.out.println("结果是假!!!");
        }
    }
	结果如下:

	 | 运算一边为真,则结果为真。做 || 运算结果如下:

​ 左边为true,右边不用判断,所以没有执行B方法。调换if中A()和B()的位置,结果如下:

​ 左边为false,需要判断右边,右边为true,所以结果为true,两个方法都执行了。

6.4.3 逻辑运算符的优先顺序

逻辑非的优先级最高,逻辑与次之,逻辑或最低,即:!(非) → &&(与) → ||(或)

分析下面代码:

public static void main(String[] args) {
        if (B() || A() && C()) {
            System.out.println("结果是真!!!");
        } else {
            System.out.println("结果是假!!!");
        }
    }

若按照优先顺序,先运算 A() && C(),之后B()再和(A() && C())的结果做短路或(||)运算

执行结果:

执行的结果时按照左右顺序来的????????
我表示一脸懵!!待研究······

Tips:&&的优先级高于||,但运算符的优先级与系统进行表达式运算的顺序没有必然的关系,比如表达式B() || A() && C(),由于&&优先级高于||,所以等效于B() ||( A() && C()),但是系统会先对表达式中的B()进行判断,若B()的值为真,则由于逻辑运算符的短路效应,后面的表达式A() && C()就不再判断;反之则继续进行表达式A() && C()的判断。

public static void main(String[] args) {
        if (A() || B() && C()) {        //A()方法和C()方法作逻辑与运算
            System.out.println("结果是真!!!");
        } else {
            System.out.println("结果是假!!!");
        }
    }

​ 如上代码所示,A()的值为真,由短路效应得知,B() && C()就不用判断了,其运行结果如下: image-20221022103408199

6.5 赋值运算符

​ 赋值运算符是为指定变量分配值的符号,如下是Java中常用的赋值运算符:

运算符 描述 例子
= 简单的赋值运算符,将值从右侧操作数分配给左侧操作数 c = a + b将a + b的值赋给c
+= 加和赋值运算符。它将右操作数添加到左操作数,并将结果分配给左操作数。 c += a等于c = c + a
-= 减和赋值运算符。它从左侧操作数中减去右侧操作数,并将结果分配给左侧操作数。 c -= a等于c = c - a
*= 乘和赋值运算符。它将右操作数与左操作数相乘,并将结果分配给左操作数。 c *= a等于c = c * a
/= 除和赋值运算符。它将左操作数除以右操作数,并将结果分配给左操作数。 c /= a等于c = c / a

6.6 其他运算符

6.6.1 条件运算符

​ 条件运算符也称为三元运算符。该运算符由三个操作数组成,用于判断布尔表达式。它的目的是确定应将哪个值分配给变量。条件运算符的语法为:

变量 = (布尔表达式) ? 值1 : 值2

​ 如果布尔表达式为真,就将 值1分配变量,否则将 值2分配给变量。实例如下:

public class Demo02 {
    public static void main(String[] args) {
        int age = 18;
        System.out.println((age>=18) ? "你已成年了!" : "你还未成年呢!");
    }
    
    // 控制台输出“你已成年了!”
}

6.6.2 instanceof 运算符

instanceof运算符将对象与指定类型进行比较,检查对象是否是一个特定类型(类类型或接口类型)。

​ 语法为:

( Object reference variable ) instanceof (class/interfacetype)

​ instanceof左侧的变量所指向的对象,是instanceof右侧类或接口的一个对象,结果为真,否则结果为假。实例如下:

public class Demo02 {
    public static void main(String[] args) {
        String str = "Hello, world";
        boolean b = str instanceof String;
        System.out.println(b);
    }

    // 控制台输出“true”
}

标签:重学,Java,结果,System,运算符,&&,println,out
From: https://www.cnblogs.com/XQ-Yang/p/17122323.html

相关文章

  • 重学Java-第二章 Java快速入门
    2.1在Windows上安装Java2.1.1下载安装包打开Oracle官网的JDK下载地址,推荐下载JDK1.8版本,1.8版本是目前企业使用最多的版本,下拉找到Java8,选择windows平台。​ ......
  • 重学Java-第三章 Java基本语法
    3.1基本语法​ 编写Java程序时,应注意以下几点:大小写敏感:Java是对大小写敏感的,这就表示标识符Hello和hello是不同的。类名:对所有的类来说,类名的首字母应大写,若类名由......
  • 重学Java-第四章 Java变量
    4.1什么是变量​ 在程序设计中,变量是指一个包含值的存储地址以及对应的符号名称。从定义上来看,变量大概可以分为两部分:变量的名字和变量的值,可通过变量来访问变量值。......
  • 重学Java-第五章 Java数据类型
    5.1概述​ Java语言的数据类型可以分为基本数据类型(primitivedatatype)和引用型数据类型(referencedatatype)5.2基本数据类型5.2.1整数类型​ Java语言提供了......
  • java 字符串如何直接转LocalDateTime?
    1.情景展示在实际开发过程中,可能会遇到将前端传的日期格式转成LocalDateTime插入到数据库的情况,如何将日期转成LocalDateTime呢?2.原因分析在Java8中,日期类不同于以......
  • java 文件File与byte[]数组相互转换的两种方式
     1.文件转byte[]方式一:文件输入流Filefile=newFile("C:\\Users\\Marydon\\Desktop\\个人信用报告.pdf");try{FileInputStreamfis=newFileInputStream(file);......
  • JavaScript 中 ?. 和 ?? 分别是什么?
    ?.和??是JavaScript中的两个新操作符,分别是可选链操作符(optionalchainingoperator)和空值合并操作符(nullishcoalescingoperator)。?.操作符?.可选链操作符用于......
  • java json对象转json字符串(带转义符)(json对象嵌套json字符串)
    1.情景展示如上图所示,这一个标准的json字符串,双引号需要使用反斜杠\进行转义,一般情况下,我们是用不到这种json字符串的,在java中,json字符串的通常表现形式是这种:......
  • java 实体类Bean与Map互相转化
     1.情景展示java对象与Map之间进行相互转换,如何实现? 2.分析通过org.apache.commons.beanutils.BeanUtils类来实现所需jar包<dependency><groupId>com......
  • Java 枚举类转json对象
     1.情景展示 如上图所示,我想要将枚举类转换成json对象,key对应属性名称,value对应属性值,效果如下:{"IvcVoucherCode":"200","IvcVoucherStatus":"票据模板下载成功"}......