java运算符详细的优先级和概述

小熙最近面试时,被问各种运算符的优先级顺序时有些懵,特此找到篇相关的好文分享下。

尊重原创:(口诀)转自http://lasombra.iteye.com/blog/991662

     今天看到《java编程思想》中的运算符优先级助记口诀,不过“Ulcer Addicts Really Like C A lot”在中文语境下不好记。我试着写一个口诀: 
单目乘除为关系,逻辑三目后赋值。 

单目:单目运算符+ –(负数) ++ -- 等 
乘除:算数单目运算符* / % + - 
为:位移单目运算符<< >> 
关系:关系单目运算符> < >= <= == != 
逻辑:逻辑单目运算符&& || & | ^ 
三目:三目单目运算符A > B ? X : Y 
后:无意义,仅仅为了凑字数 
赋值:赋值=

附:个人补充

   1、 该表中优先级按照从高到低的顺序书写,也就是优先级为1的优先级最高,优先级14的优先级最低。
 
  2、 结合性是指运算符结合的顺序,通常都是从左到右。从右向左的运算符最典型的就是负号,例如3+-4,则意义为3加-4,符号首先和运算符右侧的内容结合。
 
  3、 instanceof作用是判断对象是否为某个类或接口类型,后续有详细介绍。
 
  4、 注意区分正负号和加减号,以及按位与和逻辑与的区别
 
  其实在实际的开发中,不需要去记忆运算符的优先级别,也不要刻意的使用运算符的优先级别,对于不清楚优先级的地方使用小括号去进行替代,示例代码:      
   int m = 12;
   int n = m << 1 + 2;
   int n = m << (1 + 2); //这样更直观
这样书写代码,更方便编写代码,也便于代码的阅读和维护。
分类: Java基础
小熙补充:

java中的运算符大概有五类:算术运算符、赋值运算符、比较运算符(关系运算符)、逻辑运算符、条件运算符(三元运算符)

一、算术运算符

算术运算符主要用于进行基本的算术运算,如加法、减法、乘法、除法等。

Java 中常用的算术运算符:

 其中,++ 和 -- 既可以出现在操作数的左边,也可以出现在右边,但结果是不同滴

例1:

运行结果:

例2:

运行结果:

一定要注意哦!自增和自减运算符只能用于操作变量,不能直接用于操作数值或常量!例如 5++ 、 8-- 等写法都是错误滴!

PS:% 用来求余数,也称为”取模运算符“

例子:

public class HelloWorld{
    public static void main(String[] args) {
        int age1=24;
        int age2=18;
        int age3=36;
        int age4=27;
        int sum=age1+age2+age3+age4;
        double avg=sum/4;
        int minus=Math.abs(age1-age2);
        int newAge=--age1;
        System.out.println("四个年龄的总和:"+sum);
        System.out.println("四个年龄的平均值:"+avg);
        System.out.println("age1 和 age2年龄差值:"+minus);
        System.out.println("age1自减后的年龄:"+newAge);

    }
}

二、赋值运算符

赋值运算符是指为变量或常量指定数值的符号。如可以使用 “=” 将右边的表达式结果赋给左边的操作数。

Java 支持的常用赋值运算符,如下表所示:

例子:

public class HelloWorld{
    public static void main(String[] args) {
        int one = 10 ;
        int two = 20 ;
        int three = 0 ;
        three=one+two;
        System.out.println("three = one + two ==> "+three);
        three+=one;
        System.out.println("three += one ==> "+three);
        three-=one;
        System.out.println("three -= one ==> "+three);
        three*=one;
        System.out.println("three *= one ==> "+three);
        three/=one;
        System.out.println("three /= one ==> "+three);
        three%=one;
        System.out.println("three %= one ==> "+three);
    }
}

三、比较运算符

比较运算符用于判断两个数据的大小,例如:大于、等于、不等于。比较的结果是一个布尔值( true 或 false )。

Java 中常用的比较运算符如下表所示:

注意哦:

1、  > 、 < 、 >= 、 <= 只支持左右两边操作数是数值类型

2、  == 、 != 两边的操作数既可以是数值类型,也可以是引用类型

例子:

public class HelloWorld{
    public static void main(String[] args) {
        int a=16;
        double b=9.5;
        String str1="hello";
        String str2="imooc";
        System.out.println("a等于b:" + (a  == b));
        System.out.println("a大于b:" + (a  > b));
        System.out.println("a小于等于b:" + (a <  b));
        System.out.println("str1等于str2:" + (str1.equals(str2)));
    }
}

ps: 1、java中equals和==的区别 值类型是存储在内存中的堆栈(简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中。
  2、==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。
  3、equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。
  4、==比较的是2个对象的地址,而equals比较的是2个对象的内容,显然,当equals为true时,==不一定为true。

四、逻辑运算符

逻辑运算符主要用于进行逻辑运算。Java 中常用的逻辑运算符如下表所示:

我们可以从“投票选举”的角度理解逻辑运算符:

1、 :要求所有人都投票同意,才能通过某议题

2、 :只要求一个人投票同意就可以通过某议题

3、 :某人原本投票同意,通过非运算符,可以使其投票无效

4、 异或:有且只能有一个人投票同意,才可以通过某议题

当使用逻辑运算符时,我们会遇到一种很有趣的“短路”现象。

譬如:( one > two ) && ( one < three ) 中,如果能确定左边 one > two 运行结果为 false , 则系统就认为已经没有必要执行右侧的 one < three 啦。

同理,在( one > two ) || ( one < three ) 中,如果能确定左边表达式的运行结果为 true , 则系统也同样会认为已经没有必要再进行右侧的 one < three 的执行啦!

例子:

public class HelloWorld {
    public static void main(String[] args) {
        boolean a = true; // a同意
        boolean b = false; // b反对
        boolean c = false; // c反对
        boolean d = true; // d同意
        //a与b都必须要同意才能通过
        System.out.println((a && b) + " 未通过");
        //a与b必须有一人同意才能通过
        System.out.println((a || b) + " 通过");
        //a为反对才能通过
        System.out.println((!a) + " 未通过");
        //c与d中必须有且只有一人同意才能通过
        System.out.println((c ^ d) + " 通过");
    }
}

五、条件运算符

条件运算符( ? : )也称为 “三元运算符”。

语法形式:布尔表达式 ? 表达式1 :表达式2

运算过程:如果布尔表达式的值为 true ,则返回 表达式1 的值,否则返回 表达式2 的值

例如:

因为,表达式 8>5 的值为 true ,所以,返回: 8大于5

例子:

public class HelloWorld{
    public static void main(String[] args) {
        int score=68;
        String mark =(score>=60)?"及格":"不及格";
        System.out.println("考试成绩如何:"+mark);
    }
}

最后小熙附上一篇关于位运算符的详解链接(有兴趣的可以看看):位运算符详解

猜你喜欢

转载自blog.csdn.net/weixin_41133233/article/details/85334050