Java运算符

运算符简介

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

首先对于程序开发而言,里面会提供有大量的基础运算符,那么这些运算符也都会提供有各自的优先顺序,可是从正常角度来讲个人不建议去记这些运算符优先级。

1 * 2 + 3 / 4       对程序来讲费神
(1 * 2) + (3 / 4)   简单清晰,一目了然

Java运算符_第1张图片
运算符

上面的运算符不用去记,只有记住:括号的优先级最高
关键性的问题是,对于程序的开发而言,个人不建议编写很复杂的计算。

范例:以一个程序为例

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) ;
    }
}

D:\fgqjava>javac JavaDemo.java

D:\fgqjava>java JavaDemo
30

为什么是30不要去弄懂它,鬼才知道

如果你在项目代码里面按照上面的逻辑编写了代码,小心被人骂祖宗二十代。所以对于程序代码而言,实际上已经告别了复杂程序逻辑时代,更多情况下是希望大家去编写一些简单易懂的代码。

数学运算符

在Java中数学运算都提供了标准的支持。包括四则运算都是支持的。

范例:实现一个简单的四则运算

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

D:\fgqjava>javac JavaDemo.java

D:\fgqjava>java JavaDemo
886891784

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

范例:简化运算符

public class JavaDemo {
    public static void main(String args[]) {
        int num = 10 ;
        num = num + 20 ;  // num +=20 效果是类似的,但是“+=”操作占用内存会小
        System.out.println(num) ;
    }
}

D:\fgqjava>javac JavaDemo.java

D:\fgqjava>java JavaDemo
30

对于以上“num = num + 20” 在内存小的时候就不适合了,所以才提供有一系列的简化运算

public class JavaDemo {
    public static void main(String args[]) {
        int num = 10 ;
        num %= 3 ;
        System.out.println(num) ;
    }
}

D:\fgqjava>javac JavaDemo.java

D:\fgqjava>java JavaDemo
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("x = " + y) ;    // 19
    }
}

D:\fgqjava>javac JavaDemo.java

D:\fgqjava>java JavaDemo
计算结果:-9
x = 11
x = 19

把上面代码中的 “int result = ++ x - y -- ;” 替换为 如下代码:
++ x ;
int result = x - y ;
y -- ;
两个代码执行结果一致,此代码更加清晰明了。

强烈建议:数学计算关系里面就写类似下面代码这种简单计算操作。
关系运算符

关系运算的主要特征就是进行大小的比较处理,包括:大于(>)、小于(<)、大于等于(>=)、小于等于(<=)、不等于(!=)、相等(==)。所有的关系运算返回的判断结果都是布尔类型的数据。
单等(=)是赋值
双等(==)是逻辑关系比较

范例:做一个大小关系的判断

public class JavaDemo {
    public static void main(String args[]) {
        int x = 10 ;
        int y = 20 ;
        boolean flag = x > y ;  // false 所有的关系运算返回的判断结果都是布尔类型的数据
        System.out.println(flag) ;
    }
}

D:\fgqjava>javac JavaDemo.java

D:\fgqjava>java JavaDemo
false

在进行关系判断的时候特别需要注意的就是相等的判断问题。在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) ;
    }
}

D:\fgqjava>javac JavaDemo.java

D:\fgqjava>java JavaDemo
true

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

范例:在字符处理上使用关系运算

public class JavaDemo {
    public static void main(String args[]) {
        char c = '建' ;      // 单引号是字符,双引号是字符串(多个字符)
        System.out.println((int)c) ;
    }
}

D:\fgqjava>javac JavaDemo.java

D:\fgqjava>java JavaDemo
24314



public class JavaDemo {
    public static void main(String args[]) {
        char c = '建' ;  
        boolean flag = 24314 == c ;  // true,数据类型之间提供有转型支持
        System.out.println(flag) ;
    }
}

D:\fgqjava>javac JavaDemo.java

D:\fgqjava>java JavaDemo
true

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

逻辑运算符【三目(赋值)运算符】

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

范例:判断两个数字的大小,将最大值保存

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) ;
    }
}

D:\fgqjava>javac JavaDemo.java

D:\fgqjava>java JavaDemo
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) ;
    }
}

D:\fgqjava>javac JavaDemo.java

D:\fgqjava>java JavaDemo
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) ;
    }
}

D:\fgqjava>javac JavaDemo.java

D:\fgqjava>java JavaDemo
20

虽然允许进行嵌套处理,但是程序的可读性变的很差,根据实际的情况确定是否使用。
三目是一个赋值运算符,很重要,一定要掌握,以后开发一定会用到。

位运算符

位运算指的是可以直接进行二进制数据的计算处理,主要有:与(&)、或(|)、异或(^)、反码(~)、移位处理。如果要想理解位操作,则一定要清楚十进制与二进制之间的转换处理逻辑:数字除2取余。

13的二进制
13/2 = 6 ...... 1
6/2 = 3 ...... 0
3/2 = 1 ...... 1
1/2 = 0 ...... 1
除到商为0结束,从下到上读:1101
Java中的整型int是32位。所以应该是:13 -> 00000000 00000000 00000000 00001101

简单计算
1 2 4 8
1 0 1 1
1x1 + 0x2 + 1x4 + 1x8 = 13

范例:观察与操作,如果两位都是1结果才是1,有1位是0结果就是0

public class JavaDemo {
    public static void main(String args[]) {
        int x = 13 ;
        int y = 7 ;
        System.out.println(x & y) ;
    }
}

D:\fgqjava>javac JavaDemo.java

D:\fgqjava>java JavaDemo
5

13的二进制:00000000 00000000 00000000 00001101
7的二进制: 00000000 00000000 00000000 00000111
根据规则:如果两位都是1结果才是1,有1位是0结果就是0,可以得出如下结果
&计算:     00000000 00000000 00000000 00000101  ——> 5(1x1 + 0x2 + 1x4)

范例:观察或运算,有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) ;
    }
}

D:\fgqjava>javac JavaDemo.java

D:\fgqjava>java JavaDemo
15

13的二进制:00000000 00000000 00000000 00001101
7的二进制: 00000000 00000000 00000000 00000111
根据规则:有1位是1结果就是1,2位都是0的时候结果才是0
或(|)计算: 00000000 00000000 00000000 00001111  ——> 15(1x1 + 1x2 + 1x4 + 1x8)

在进行位运算处理的时候还可以进行移位的计算。例如:以2的3次方为例。

范例:移位处理

public class JavaDemo {
    public static void main(String args[]) {
        int x = 2 ;
        System.out.println(x << 2) ;  // 向左边移动2位"<<"就是2的3次方
        System.out.println(x) ;
    }
}


D:\fgqjava>javac JavaDemo.java

D:\fgqjava>java JavaDemo
8
2

2的二进制:00000000 00000000 00000000 00000010;从右向左的1248的原则
向左移2位:00000000 00000000 00000000 00001000;——> 8(根据从右向左的1248的原则,8的位置是1,结果就是8)

最初提高计算的性能可以通过位来完成。
现在很多程序帮助准备好类库了,自己可以简单完成。
还有就是内存很大,就是你写的再不怎么样,性能也不会查到哪去。
那为什么还有位操作呢?

面试题:请解释&和&&、|和||的区别?(这个答案知道就可以了)

& 和 | 两个运算符可以进行位运算与逻辑运算;
    在进行“逻辑运算”的时候,所有的判断条件都要执行;
    在进行“位运算”的时候,只是针对于当前的数据进行“与”和“或”处理;
在逻辑运算上还可以使用&&(短路与)、||(短路或);
    &&:在若干个条件判断的时候,如果前面的条件返回了false,后续所有的条件都不再判断,最终的结果就是false;
    ||:在若干个条件判断的时候,如果前面的条件返回了ture,后续的条件不再执行,最终结果就是true;

你可能感兴趣的:(Java运算符)