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

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

4.1 Java运算符

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

带你领略Java运算符之美   | 带你学《Java编程入门》之四图一 运算符优先级

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

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入门编程文章查看此处

上一篇:Presto Core Data Structures: Slice, Block & Page


下一篇:DataLakeAnalysis: 使用DataX同步Kafka数据到OSS进行分析