带你领略Java运算符之美 | 带你学《Java编程入门》之四

简介: 所有的程序开发都是一种数字的处理游戏,那么对于数字的处理一定会有所谓的操作模式,而这些操作模式就称为运算符。例如:如果要进行加法运算肯定使用的“+”这样的运算符来完成,而对于运算符而言,也是存在先后的关系,像小学学习四则运算,采用先乘除后加减的顺序完成。当然,程序开发也会有这些运算符。

上一篇:带你学《Java编程入门》之三:火眼金睛看Java基本类型(下)
【本节目标】
学完本章你需要了解Java运算符有哪些以及它们的优先级,本节通过案例分析了数学运算符、关系运算符、三目(赋值)运算符以及位运算符,希望学有所获。

4.1 Java运算符

首先对于程序开发而言,里面会提供大量的基础运算符,那么这些运算符也都会提供有各自的优先顺序,但是一般不建议去记这些运算符的优先级。

image.png图一 运算符优先级

关键性的问题是,对于程序开发而言,强烈不建议编写很复杂的计算。
范例:以一个程序为例

public class JavaDemo {
    public static void main(String args[]) {
        int x = 10 ;
        int y = 20 ;
        int result = x -- + y++ * -- y / x / y * ++ x - --y + y ++ ;
        System.out.println(result) ; //执行结果为30
    }
}

对于程序代码而言,实际上已经告别了复杂程序逻辑时代,更多情况下是希望大家编写一些简单易懂的代码。

4.2 数学运算符

在Java中数学运算都提供了一个标准的支持。包括四则运算都是支持的。
范例:实现一个简单的四则运算

public class JavaDemo {
    public static void main(String args[]) {
        int result = 890234890 * ( 2902390 + 100 ) * 2 ;
        System.out.println(result) ; //执行结果为886891784
    }
}

在进行计算的时候,编程语言一般也都会提供有简化(+=、*=、-=、/=、%=)的运算符支持。
范例:简化运算符

public class JavaDemo {
    public static void main(String args[]) {
        int num = 10 ;
              //num =num +20;
        num += 20 ;
        System.out.println(num) ;  //执行结果:30
    }
}

对于以上"num =num +20;"代码,在内存小的时代就不适合了,所以才提供有一系列的简化运算。
范例:求模

public class JavaDemo {
    public static void main(String args[]) {
        int num = 10 ;
        num %= 3;
        System.out.println(num) ;  //执行结果:1
    }
}

在数学计算里面最头疼的是“++”、“--”,因为这两种运算符有两类使用方法:

  • ++变量、--变量:先进行变量的自增或自减,而后在进行数字的计算;
  • 变量++、变量--:先使用变量进行计算,而后再进行自增或自减。

范例:实现自增与自减

public class JavaDemo {
    public static void main(String args[]) {
        int x = 10 ;
        int y = 20 ;
        // 1、++ x:首先x的内容要先自增1,为11;
        // 2、y --:先进行计算,使用的内容是20,计算完成后自减
        int result = ++ x - y -- ;
        System.out.println("计算结果:" + result) ;     // -9
        System.out.println("x = " + x) ;    // 11
        System.out.println("y = " + y) ;    // 19
    }
}

这些代码程序都是在当初内存不大的情况下提供的处理方式,但是现在来看,这种计算就较为繁琐,尤其是在硬件成本降低的今天,这类操作如果不是必须的情况下,不建议这样使用。

public class JavaDemo {
    public static void main(String args[]) {
        int x = 10 ;
        int y = 20 ;
        ++ x ;
        int result = x - y;
        y -- ;
        System.out.println("计算结果:" + result) ;     // -9
        System.out.println("x = " + x) ;    // 11
        System.out.println("y = " + y) ;    // 19
    }
}

4.3 关系运算符

关系运算符只要特征进行大小的比较处理,包括:大于(>)、小于(<)、大于等于(>=)、小于等于(<=)、不等(!=)、相等(==)。所有的关系运算返回值类型为布尔型。
范例:做一个大小关系的判断

public class JavaDemo {
public static void main(String args[]) {
int x = 10 ;
int y = 20 ;
boolean flag = x > y ; // false
System.out.println(flag) ;
   }
}

在进行关系判断的时候需要注意的是相等的判断问题。在Java里面“=”表示赋值运算,“==”是内容相同的比较。
范例:判断相等

public class JavaDemo {
public static void main(String args[]) {
int x = 10 ;
int y = 10 ;
boolean flag = x == y ; // true
System.out.println(flag) ;
    }
}

在进行关系运算的时候可以针对所有的基本数据类型,例如:也可以直接使用字符来处理。
范例:在字符处理上使用关系运算

public class JavaDemo {
  public static void main(String args[]) {
    char c = '建' ;
    boolean flag = 24314 == c ; // true
    System.out.println(flag) ;
  }
}

数据类型之间提供有转型支持,所以在进行判断的时候字符会自动转为int而后进行数字的比较。

4.4 三目(赋值)运算符

在进行程序开发的时候三目运算符使用的非常多,合理利用三目运算可以避免一些大范围的程序编写。三目运算符是所谓的赋值运算处理。它是需要设置一个逻辑关系的判断以后才可以进行的赋值操作,基本语法如下:
关系运算?关系满足时的内容:关系不满足时的内容。
范例:判断两个数字的大小,将最大值保存

public class JavaDemo {
  public static void main(String args[]) {
    int x = 10 ;
    int y = 20 ;
// 判断x与y的大小关系来决定最终max变量的内容
    int max = x > y ? x : y ;
    System.out.println(max) ;  //执行结果:20
   }
}

不用三目运算符去编写同样的程序

public class JavaDemo {
  public static void main(String args[]) {
    int x = 10 ;
    int y = 20 ;
// 判断x与y的大小关系来决定最终max变量的内容
    int max = 0 ;
    if (x > y) {
       max = x ;
    } else {
       max = y ;
    }
   System.out.println(max) ;  //执行结果:20
  }
}

三目运算本身也可以进行嵌套处理,也就是说在赋值语句位置上可以进一步吧编写三目运算符。
范例:三目运算嵌套,将三个数字的最大值保存下来

public class JavaDemo {
  public static void main(String args[]) {
    int x = 10 ;
    int y = 20 ;
    int z = 15 ;
    int max = x > y ? (x > z ? x : z) : (y > z ? y : z) ;
    System.out.println(max) ;  //执行结果:20
  }
}

虽然允许进行嵌套处理,但是程序的可读性变得很差,根据实际情况判断是否使用三目运算。

4.5 位运算符

位运算指的是可以直接进行二进制数据的计算处理,主要有:与(&)、或(|)、异或(^)、反码(~)、移位处理。
如果要想理解位操作,则一定要清楚十进制与二进制之间的转换处理逻辑:数字除2取余。
你所不知道的13的二进制表示法
范例:观察与操作,如果两位都是1结果才是1,有一位是0,结果就是0。

public class JavaDemo {
  public static void main(String args[]) {
    int x = 13 ;
    int y = 7 ;
  System.out.println(x & y) ;//执行结果:5
  }
}

13的二进制:00000000000000000000000000001101
7的二进制:00000000000000000000000000000111
&计算:00000000000000000000000000000101
范例:观察或运算,有1位是1结果就是1,2位都是0的结果才是0

public class JavaDemo {
  public static void main(String args[]) {
    int x = 13 ;
    int y = 7 ;
  System.out.println(x | y) ;//执行结果:15
   }
}

13的二进制:00000000000000000000000000001101
7的二进制:00000000000000000000000000000111
|计算:00000000000000000000000000001111
在进行位运算处理的时候还可以进行移位的计算。例如:以2的3次方计算为例。
范例:移位处理

public class JavaDemo {
  public static void main(String args[]) {
    int x = 2 ;
  System.out.println(x << 2) ;
  System.out.println(x) ;
  }
}

2的二进制:
00000000000000000000000000000010
向左移2位:
00000000000000000000000000001000
面试题:请解释&和&&、|和||的区别?
&和|两个运算符可以进行关系运算与逻辑运算;

  • 在进行逻辑运算的时候所有的判断条件都要执行;
  • 在进行位运算的时候只是针对于当前的数据进行与和或处理;

在逻辑运算上还可以使用&&、||;

  • &&:在若干个条件判断的时候,如果前面的条件返回了false,后续的所有条件不再判断最终的结果就是false;
  • ||:在若干个条件判断的时候,如果前面的条件返回了true,后续条件不再执行最终的结果就是true;

想学习更多的Java的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学
下一篇:带你学《Java编程入门》之五:“直线、分叉、圆圈”--程序逻辑之争
更多Java入门编程文章查看此处

相关文章
|
1天前
|
SQL Java 关系型数据库
零基础轻松入门Java数据库连接(JDBC)
零基础轻松入门Java数据库连接(JDBC)
6 0
|
1天前
|
小程序 Java 容器
03|Java基础语法:讲解标识符、关键字、变量、数据类型、运算符、控制语句(条件分支、循环)
03|Java基础语法:讲解标识符、关键字、变量、数据类型、运算符、控制语句(条件分支、循环)
7 0
|
1天前
|
Java
探索Java世界的奇妙工具——运算符与表达式运算符
探索Java世界的奇妙工具——运算符与表达式运算符
5 0
|
1天前
|
Java
深入浅出Java基础语法:标识符、关键字、变量、数据类型、运算符与控制语句
深入浅出Java基础语法:标识符、关键字、变量、数据类型、运算符与控制语句
5 0
|
1天前
|
存储 安全 算法
Java一分钟之-Java集合框架入门:List接口与ArrayList
【5月更文挑战第10天】本文介绍了Java集合框架中的`List`接口和`ArrayList`实现类。`List`是有序集合,支持元素重复并能按索引访问。核心方法包括添加、删除、获取和设置元素。`ArrayList`基于动态数组,提供高效随机访问和自动扩容,但非线程安全。文章讨论了三个常见问题:索引越界、遍历时修改集合和并发修改,并给出避免策略。通过示例代码展示了基本操作和安全遍历删除。理解并正确使用`List`和`ArrayList`能提升程序效率和稳定性。
6 0
|
1天前
|
缓存 Java 数据库
Java并发编程学习11-任务执行演示
【5月更文挑战第4天】本篇将结合任务执行和 Executor 框架的基础知识,演示一些不同版本的任务执行Demo,并且每个版本都实现了不同程度的并发性。
19 4
Java并发编程学习11-任务执行演示
|
1天前
|
存储 安全 Java
12条通用编程原则✨全面提升Java编码规范性、可读性及性能表现
12条通用编程原则✨全面提升Java编码规范性、可读性及性能表现
|
1天前
|
缓存 Java 程序员
关于创建、销毁对象⭐Java程序员需要掌握的8个编程好习惯
关于创建、销毁对象⭐Java程序员需要掌握的8个编程好习惯
关于创建、销毁对象⭐Java程序员需要掌握的8个编程好习惯
|
2天前
|
Java C语言
java中8种基本类型与运算符
java中8种基本类型与运算符
12 3
|
2天前
|
缓存 Java 数据库
Java并发编程中的锁优化策略
【5月更文挑战第9天】 在高负载的多线程应用中,Java并发编程的高效性至关重要。本文将探讨几种常见的锁优化技术,旨在提高Java应用程序在并发环境下的性能。我们将从基本的synchronized关键字开始,逐步深入到更高效的Lock接口实现,以及Java 6引入的java.util.concurrent包中的高级工具类。文中还会介绍读写锁(ReadWriteLock)的概念和实现原理,并通过对比分析各自的优势和适用场景,为开发者提供实用的锁优化策略。
3 0