zoukankan      html  css  js  c++  java
  • java与.net比较学习系列(4) 运算符和表达式

    上一篇总结了java的数据类型,得到了冰麟轻武等兄弟的支持,他们提出并补充了非常好的建议,在这里向他们表示感谢。在后面的文章中,我会尽力写得更准确和更完善的,加油!

    另外,因为C#是在java之后,也是在java的基础上设计出来的,所以C#语言与java有非常多相同的地方,同时,C#中也添加了一些新的功能和特性,比如LINQ和Lambda表达式等等。所以,我在比较java与.net的时候,大多数的不同是因为C#新添加了一些特性,只要明白这个背景就可以了。

    那么这一篇我们要总结的是java中的运算符和表达式。我想从以下几点进行总结说明。

    1,算术运算符

    2,自增自减运算符

    3,关系运算符

    4,位运算符

    5,移位运算符

    6,逻辑运算符

    7,三元运算符

    一,算术运算符

    算术运算符包括加(+),减(-),乘(*),除(/)和求余(%)五种运算符。下面是示例和代码。

    复制代码
    public class SuanShuOperator {
        public static void main(String[] args) {
            int i1 = 7;
            int i2 = 3;
    
            int jia = i1 + i2; // 加法
            int jian = i1 - i2; // 减法
            int cheng = i1 * i2; // 乘法
            int chu = i1 / i2; // 除法
            int yu = i1 % i2; // 求余
    
            System.out.println("加法运算的结果是:" + jia);
            System.out.println("减法运算的结果是:" + jian);
            System.out.println("乘法运算的结果是:" + cheng);
            System.out.println("除法运算的结果是:" + chu);
            System.out.println("求余运算的结果是:" + yu);
        }
    }
    复制代码

    程序输出结果:

    减法运算的结果是:4  乘法运算的结果是:21  除法运算的结果是:2  求余运算的结果是:1

    总结:算术运算符的用法java与C#基本相同。

    二,自增自减运算符

    自增和自减是一种特殊的算术运算符,我们的算术运算符一般是对两个数来进行操作的,但是自增和自减是对一个数进行操作的。

    自增表示该数加1,自减表示该数减1。需要重点注意的是,自增和自减运算符前缀和后缀的区别,前缀表示先自增或自减,再进行表达式计算,而后缀表示先进行表达式计算,再进行自增或自减。

    下面是示例和代码。 

    复制代码
    public class ZiZengJianOperator {
        public static void main(String[] args) {
            int a = 5;
            int b = 5;
            int x = 2 * ++a; // 自增运算符前缀
            int y = 2 * b++; // 自增运算符后缀
            System.out.println("自增运算符前缀,运算后 a=" + a + "表达式x=" + x); // 6,12
            System.out.println("自增运算符后缀,运算后 b=" + b + "表达式y=" + y); // 6,10
        }
    }
    复制代码

    程序输出结果:

    自增运算符前缀,运算后 a=6表达式x=12  自增运算符后缀,运算后 b=6表达式y=10

    总结:自增和自减运算符的用法与C#基本相同。

    三,关系运算符

    关系运算符用于计算两个操作数之间的关系,其结果是布尔类型。关系运算符包括等于(==),不等于(!=),大于(>),小于(<),大于等于(>=),小于等于(<=)。

    关系运算符在实际开发中,一般作为if的条件,因为它返回的是布尔类型。

    下面是示例和代码

    复制代码
    public class OperatorGuanxi {
        public static void main(String[] args) {
            int i=1; //0表示女,1表示男
            
            if(i==1) System.out.println("男"); //使用了关系运算符==
            else System.out.println("女");
        }
    }
    复制代码

    程序输出结果:男

    总结:关系运算符的用法与C#基本相同。

    位运算符和移位运算符在开发中使用得非常少,所以这里暂不做总结。

    六,逻辑运算符

    逻辑运算符一般用在对返回值为布尔类型的表达式进行计算,也是返回布尔类型的值。

    逻辑运算符分为非短路和短路两大类,我们重点总结的是短路逻辑运算符,因为它在实际的开发中使用得最多。

    短路逻辑运算符包括与(&&),或(||)和非(!)三种。对于与&&,只要有一个表达式返回false,则结果返回false。对于或||,只要有一个表达式返回true,则结果返回true。对于非!,就是取反,如果表达式返回false,则结果为true,如果表达式返回true,则结果为false。 

    复制代码
    public class OperatorLogic {
        public static void main(String[] args) {
            // 短路逻辑运算符
            int a = 5;
            boolean b1 = (a < 4) && (a++ < 10); // false,只要有一个表达式为false,则运算结果为false
            boolean b2 = (a < 6) || (a++ > 10); // true,只要有一个表达式为true,则运算结果就为true
            boolean b3 = !b2; //因为b2为true,所以取非结果为false
            System.out.println("逻辑与运算后的结果为:" + b1);
            System.out.println("逻辑或运算后的结果为:" + b2);
            System.out.println("逻辑非运算后的结果为:" + b3);
        }
    }
    复制代码

    程序输出结果为:

    逻辑与运算后的结果为:false  逻辑或运算后的结果为:true  逻辑非运算后的结果为:false

    总结:逻辑运算符的用法与C#基本一致。

    七,三元运算符

    三元运算符支持条件表达式,在实际开发中,我们可以用它来代替if…else语句,使我们的程序更加整洁优雅。

    它的语法格式为:expression?statement1:statement2

    下面是示例和代码: 

    复制代码
    public class OperatorSanYuan {
        public static void main(String[] args) {
            // 三元运算符
            // expression?statement1:statement2
            int i, k;
            i = 5;
            k = i >= 0 ? i : -i; // 使用了三元运算符
            System.out.println(i + "的绝对值是:" + k);
            i = -5;
            k = i >= 0 ? i : -i;
            System.out.println(i + "的绝对值为:" + k);
        }
    }
    复制代码

    程序输出结果为:

    5的绝对值是:5  -5的绝对值为:5

    总结:三元运算符的用法与C#基本相同。

    另外,表达式可以简单地看成是数据和运算符的结合。运算符的优先级我们也有必要了解,这里就不做总结了。

    文章摘自:http://www.cnblogs.com/mcgrady/p/3400462.html

  • 相关阅读:
    linux内核分析第八周理解进程调度时机跟踪分析进程调度与进程切换的过程
    linux内核分析第六周分析Linux内核创建一个新进程的过程
    Linux内核学习总结
    Linux内核分析第一周通过分析汇编代码理解计算机是如何工作的
    linux内核分析第五周分析system_call中断处理过程
    linux内核分析第三周跟踪分析Linux内核的启动过程
    转载:Understanding WPF Application Lifecycle
    Quick Sort 快速排序
    C#中的Immutable(不变的)
    一个lock和一个deadlock的例子
  • 原文地址:https://www.cnblogs.com/dean-Wei/p/3568749.html
Copyright © 2011-2022 走看看