美文网首页Java
Java运算符

Java运算符

作者: Miracle001 | 来源:发表于2019-05-15 17:23 被阅读0次
    运算符简介

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

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

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

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

    范例:以一个程序为例

    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运算符

        本文链接:https://www.haomeiwen.com/subject/cpsuaqtx.html