运算符简介

计算机自打诞生以来,用作最多的就是进行计算,而计算离不开运算符,所以运算符在我们的Java语言中的地位举足轻重,我们现在就来了解一下Java给我们提供的运算符。

从运算的元素的个数来区分,可以分为一元运算符,二元运算符,三元运算符。

其中一元运算符包括:

  • +(正数)
  • -(负数)
  • ++(自增1)
  • —(自减1)
  • ~(按位取反)
  • !(逻辑取反)

其实自增和自减也可以看成是特殊的二元运算符

二元运算符包括:

  • 算术运算符:+ ,-,*,/,%
  • 逻辑运算符:&&,||
  • 关系运算符:==,!=,>,<,>=,<=
  • 位运算符:&,|,^,<<,>>,>>>
  • 赋值运算符:=,+=,-=,*=,/=,%=,<<=,>>=,&=,^=
  • instanceof运算符:instanceof

三元运算符就只有一种: ?:

这些运算相信绝大部分已经被在座的各位所熟知,只有极个别的不是很清楚的,下面我所了解的一些面试热点知识来进行讲解。

一些运算符的小常识

自增,自减的前后位置

老生常谈的一个问题,但是还是容易被搞混,自增和自减的顺序前后到底有何不同:

  • 单独使用的时候,两种没有任何区别(温馨提示:面试的时候切记不要忘记第一点哟
  • 表达式中使用的时候,前缀会先进行+1(-1)的运算,而后缀会先运算后进行+1(-1);

在无视掉第一种情况的下,可以简单记为前缀前,后缀后

逻辑运算符的短路特性

我们在使用逻辑运算符&&,||的时候,可以利用逻辑运算符的短路特性减少运算次数,所谓短路特性就是当第一个条件可以判断最终结果的时候,就不会去判断第二个条件

A && B (当A为false,直接跳过第二个条件的判断,判定为false)
A || B (当A为true,直接跳过第二个条件的判断,判定为true)

三元运算符

该运算符的主要是决定哪个值应该赋值给变量。

		int a , b;
a = 10;
// 如果 a 等于 1 成立,则设置 b 为 20,否则为 30
b = (a == 1) ? 20 : 30;
System.out.println( "Value of b is : " + b );
// 如果 a 等于 10 成立,则设置 b 为 20,否则为 30
b = (a == 10) ? 20 : 30;
System.out.println( "Value of b is : " + b );

instanceof

该运算符用于操作对象实例,检查该对象是否是一个特定类型(类类型或接口类型)。

Vehicle a = new Car();
boolean result = a instanceof Car;
System.out.println( result);

位运算符

位运算符可能在我们日常中使用的并不是很多,算是一个小盲区。但是其实这个运算符还是非常的重要的,我们首先来了解一下运算的机制,与其他运算符不同的是,位运算符是要讲数值转换成二进制后,再进行运算。

&

|

^是按位异或运算符,只有两个对应的运算位不一致的时候,对应计算出的位置为1,否则为0。

~是按位取反运算符,将每一位取反(1 -> 0,0 ->1)

这里需要注意>>>>>存在一定的区别:

>> :该数对应的二进制码整体右移,左边的用原有标志位补充,右边超出的部分舍弃。

>>> :不管正负标志位为0还是1,将该数的二进制码整体右移,左边部分总是以0填充,右边部分舍弃。

其余操作部分与<<类似,就不再画图演示

位运算符的运用场景

  • 计算 \(m * 2^n\) 次方

    2 << 3 = 16;
    2 * (2 * 2 * 2) = 16;
  • 判断一个数n的奇偶性

    a & 1 = 0; // 偶数
    a & 1 = 1; // 奇数
  • 不用临时变量交换两个数

    a = a^b;
    b = b^a;
    a = a^b;
  • x 的 相反数 表示为 (~x+1)

    -x = (~x+1)
  • 取绝对值 (a^(a>>31))-(a>>31)

其余的一些在算法中用到的场景,我这里就不再多少,有兴趣的同学可以去研究一下~

运算符优先级

最高优先级的在该表上方,最低优先级的在该表底部

类别 操作符 关联性
后缀 ()[].(点操作符) 左到右
一元 ++ - !~ 右到左
乘性 * / % 左到右
加性 + - 左到右
移位 >> >>> << 左到右
关系 > >= = < <= 左到右
相等 == ~= 左到右
按位与 & 左到右
按位异或 ^ 左到右
按位或 | 左到右
逻辑与 && 左到右
逻辑或 || 左到右
条件 ?: 从右到左
赋值 =,+=,-=,等等 从右到左
逗号 左到右

公众号

动动小手点点关注,就是对创作者最大的支持和赞同

Java Grammar(二):运算符的更多相关文章

  1. java总结(二)(运算符)

    算数和赋值运算符 1.变量类型溢出时候,会直接取反:出现x>x+1 2.知道a++和++a 3.知道a/0错误 a/0.0无穷大 字符串 1.知道栈区.堆区和方法区 2.知道new String ...

  2. Java的位运算符详解实例——与(&)、非(~)、或(|)、异或(^)

    位运算符主要针对二进制,它包括了:“与”.“非”.“或”.“异或”.从表面上看似乎有点像逻辑运算符,但逻辑运算符是针对两个关系运算符来进行逻辑运算,而位运算符主要针对两个二进制数的位进行逻辑运算.下面 ...

  3. Java的位运算符实例——与(&)、非(~)、或(|)、异或(^)

    一.Java的位运算符实例——与(&).非(~).或(|).异或(^) 1.与(&) 0 & 2 = 0 0 0 0 0 1 0 0 1 0 2.非(~) ~0 = 7 0 0 ...

  4. JavaSE复习日记 : Java操作符\关系运算符\逻辑运算符\赋值运算符\字符串连接符\三元运算符

    // Java操作符\关系运算符\逻辑运算符\赋值运算符\字符串连接符\三元运算符 /* * 一 Java操作符 * * Java操作符都有哪些? * +, -, *, /, %, ++, -- * ...

  5. JAVA_SE基础——11.Java中的运算符

    在程序设计中,运算符应用得十分广泛,通过运算符可以将两个变量进行任意运算.数学中的"+"."-"."*"."/"运算符同 ...

  6. Java基础-比较运算符Compare Operators

    Java基础-比较运算符Compare Operators 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.关系运算符 关系运算符包括: 1>.大于(>) 2> ...

  7. Java基础-位运算符Bitwise Operators

    Java基础-位运算符Bitwise Operators 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.位运算特点 位运算符分为按位与(&),按位或(|),按位异或(^ ...

  8. Java编程基础-运算符

    Java中的运算符大致分为:算术运算符.赋值运算符.关系运算符.逻辑运算符和位运算符五类. (1).算术运算符:+  -  *  /  %  ++  -- (2).赋值运算符:=  +=  -=  * ...

  9. Java 中的运算符和流程控制

    Java 中的运算符和流程控制 + 面试题 算术运算符 Java 中的算术运算符,包括以下几种: **算术运算符** **名称** **举例** + 加法 1+2=3 - 减法 2-1=1 \* 乘法 ...

  10. Java入土--Java基础(二)

    Java基础(二) 接上一讲,我们接着来聊聊Java的一些基础知识,下一讲就会进行流程的控制. 类型转换 首先呢,是类型的转换,接上一个内容的数据类型,类型转换就是数据类型更进一步的应用. 由于Jav ...

随机推荐

  1. 7)加了基础控制器Controller.php

    文件目录展示: 改动代码展示: Controller.php <?php /** * Created by PhpStorm. * User: Interact * Date: 2017/8/2 ...

  2. MOOC(7)- case依赖、读取json配置文件进行多个接口请求-setup(4)

    unittest封装测试类,setup对每个用例都要执行的函数进行初始化[初始化是自己的叫法] import unittest from day_20200208_mooc.base.interfac ...

  3. group compare vs pair compare

    成对总体检验是令y1=x11-x12:y2=x21-x22等,令新的随机变量y去做假设检验.此方法适用于排除物理因素影响,对差异更敏感,所以适用于小样本.而使用两个总体均值比较的方法适用于大样本.

  4. Hadoop什么?

    Hadoop是什么?Hadoop是一个开发和运行处理大规模数据的软件平台,是Appach的一个用java语言实现开源软件框架,实现在大量计算机组成的集群中对海量数据进行分布式计算. Hadoop框架中 ...

  5. 初级string

    标准库string类型 string对象初始化 string s1; string s2(s1); string s3("value"); string s4(n,'c'); st ...

  6. 【JVM】面试题之死锁及问题是怎么定位

    前言 之前面试的时候被问到死锁这块的问题,借着最近学习jvm来总结下死锁相关的知识.如果有地方写的不到位的地方,麻烦读者及时提出,放在评论区,我这边也好及时改正. 回顾 所谓,温故而知新,首先回顾下, ...

  7. jquery一些 事件的用法

    在jquery中有许多的事件,在使用时可分为两类吧,一种是基本的事件,如click.blur.change.foucus等,这些是通过简单封装js用法,使用如: $("a[name=link ...

  8. Angular2与Angular1的区别

    原文地址: http://www.angularjs.cn/A2Ar 整体上来说,Angular2变得更加简洁,最核心的概念只剩下一个,那就是组件Component,其它所有的一切都是围绕着Compo ...

  9. 算法笔记-Day_01(1001 害死人不偿命的(3n+1)猜想

    卡拉兹(Callatz)猜想: 对任何一个正整数 n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把 (3n+1) 砍掉一半.这样一直反复砍下去,最后一定在某一步得到 n=1.卡拉兹在 1950 ...

  10. Python---2文本编辑器

    1.介绍 在Python的交互式命令行写程序,好处是一下就能得到结果,坏处是没法保存,下次还想运行的时候,还得再敲一遍. 所以,实际开发的时候,我们总是使用一个文本编辑器来写代码,写完了,保存为一个文 ...