Java Grammar(二):运算符
运算符简介
计算机自打诞生以来,用作最多的就是进行计算,而计算离不开运算符,所以运算符在我们的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(二):运算符的更多相关文章
- java总结(二)(运算符)
算数和赋值运算符 1.变量类型溢出时候,会直接取反:出现x>x+1 2.知道a++和++a 3.知道a/0错误 a/0.0无穷大 字符串 1.知道栈区.堆区和方法区 2.知道new String ...
- Java的位运算符详解实例——与(&)、非(~)、或(|)、异或(^)
位运算符主要针对二进制,它包括了:“与”.“非”.“或”.“异或”.从表面上看似乎有点像逻辑运算符,但逻辑运算符是针对两个关系运算符来进行逻辑运算,而位运算符主要针对两个二进制数的位进行逻辑运算.下面 ...
- Java的位运算符实例——与(&)、非(~)、或(|)、异或(^)
一.Java的位运算符实例——与(&).非(~).或(|).异或(^) 1.与(&) 0 & 2 = 0 0 0 0 0 1 0 0 1 0 2.非(~) ~0 = 7 0 0 ...
- JavaSE复习日记 : Java操作符\关系运算符\逻辑运算符\赋值运算符\字符串连接符\三元运算符
// Java操作符\关系运算符\逻辑运算符\赋值运算符\字符串连接符\三元运算符 /* * 一 Java操作符 * * Java操作符都有哪些? * +, -, *, /, %, ++, -- * ...
- JAVA_SE基础——11.Java中的运算符
在程序设计中,运算符应用得十分广泛,通过运算符可以将两个变量进行任意运算.数学中的"+"."-"."*"."/"运算符同 ...
- Java基础-比较运算符Compare Operators
Java基础-比较运算符Compare Operators 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.关系运算符 关系运算符包括: 1>.大于(>) 2> ...
- Java基础-位运算符Bitwise Operators
Java基础-位运算符Bitwise Operators 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.位运算特点 位运算符分为按位与(&),按位或(|),按位异或(^ ...
- Java编程基础-运算符
Java中的运算符大致分为:算术运算符.赋值运算符.关系运算符.逻辑运算符和位运算符五类. (1).算术运算符:+ - * / % ++ -- (2).赋值运算符:= += -= * ...
- Java 中的运算符和流程控制
Java 中的运算符和流程控制 + 面试题 算术运算符 Java 中的算术运算符,包括以下几种: **算术运算符** **名称** **举例** + 加法 1+2=3 - 减法 2-1=1 \* 乘法 ...
- Java入土--Java基础(二)
Java基础(二) 接上一讲,我们接着来聊聊Java的一些基础知识,下一讲就会进行流程的控制. 类型转换 首先呢,是类型的转换,接上一个内容的数据类型,类型转换就是数据类型更进一步的应用. 由于Jav ...
随机推荐
- confidence intervals and precision|The One-Mean z-Interval Procedure|When to Use the One-Mean z-Interval Procedure
Confidence Intervals for One Population Mean When σ Is Known Obtaining Confidence Intervals for a Po ...
- JSON — Java与JSON数据互转
转换时Bean所要求的: 被转换的Bean必需是public的. Bean被转换的属性一定要有对应的get方法,且一定要是public的. Bean中不能用引用自身的this的属性,否则运行时出现et ...
- webpack中使用ECharts
npm安装ECharts 引入ECharts 通过 npm 上安装的 ECharts 和 zrender 会放在node_modules目录下.可以直接在项目代码中 require('echarts' ...
- DB2数据库多行一列转换成 一行一列
在db2中遇到多行一列转为一行一列的需求时,用db2函数 LISTAGG可以实现该功能.语法如下: SELECT [分组的字段 ] , LISTAGG([需要聚合的字段名], ',') FRO ...
- 吴裕雄--天生自然 oracle学习笔记:oracle理论学习详解及各种简单操作例子
1. 数据库的发展过程 层次模型 -->网状模型 -->关系模型 -->对象关系模型 2. 关于数据库的概念 DB:数据库(存储信息的仓库) DBMS:数据库管理系统(用于管理数据库 ...
- 垃圾回收GC
每种语言都有自己的垃圾回收机制.接下来我们来讲一下python的垃圾回收机制. 小整数对象池:python对小整数的定义为[-5,257),这些整数对象是提前建立好的,不会被垃圾回收.单个字母也一 ...
- 使用Xshell进行vi编辑时,按下end、home和Delete不能使用,解决解决办法
使用Xshell连接到Linux进行vi编辑时,进入编辑模式,按下end键,光标无法移到行位,home也不能到行首,其它的Delete键也是不能使用,如何解决? Xshell选项设置如下: 文件→属性 ...
- HTC“卖身”:那些辉煌、落寞与终结
9月21日,HTC董事会决议通过与谷歌签订合作协议书.前者专注Pixel手机设计研发人才加入谷歌,HTC知识产权非专属授权予Google使用,交易作价11亿美元.事实上,这与微软收购诺基亚不同,并非是 ...
- WordPress 安装主题、插件时问题解决办法
--当能够在外网访问到自己的博客时,很多人都会很兴奋吧!如果环境是自己配置的,而不是用的集成环境肯定也会有点小小的成就感. --但是在我兴奋的时候遇到了个小麻烦,下载插件提示我输入FTP信任凭据,输了 ...
- 3——PHP 简单运算符的使用
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...