目录
1. 算术运算符
2. 位运算符
3 .逻辑运算符
4. 赋值运算符
5. 关系运算符
6. 条件运算符
instanceof 运算符
7.Java运算符优先级
1. 算术运算符
运算符顾名思义是一种符号,它是连接一个以上的操作符,实现某种功能的运算。
我们就先来认识一下算术运算符吧!
算术运算符用在数学表达式中,主要实现的是算术运算,如我们常见的加法
、减法
、乘法
、除法
等。
其中,自增(++)和自减(--)运算符有两种写法:前缀(++i,--i)和后缀(i++,i--)。
1.前缀自增自减法(++i,--i): 先进行自增或者自减运算,再进行表达式运算。
2. 后缀自增自减法(i++,i--): 先进行表达式运算,再进行自增或者自减运算
下面来看下代码吧!
大家可以发现++在变量的左边和右边,赋值得到的结果是不一样的,自减也是同样的道理。
2. 位运算符
Java定义了位运算符,应用于整数类型(int),长整型(long),短整型(short),字符型(char),和字节型(byte)等类型。位运算时 先转换为二进制,再按位运算。
表格中的例子中,变量a
的值为60,变量b
的值为13:
下面来看看代码吧:
3 .逻辑运算符
逻辑运算符是通过运算符将操作数或等式进行逻辑判断的语句。
表格中的例子中,假设布尔变量a为真,变量b为假:
我们可以通过“举手表决”来理解逻辑运算符
- 与
&&
:a
同意了(值为true
),c
也同意了(值为true
),那这件事情肯定就Ok了,所以a && c
就为ture
;但是其中有一个人不同意,这件事情不行,也就是a
和c
中,有一个为false
,a && c
就为false
。 - 或
||
:这件事情只要有一个人同意了,就可以了。所以a
和c
中,有一个为true
,a || c
就为true
。 - 非
!
:某个人原本同意,但非运算使他的结果变为相反的。a
为true
,!a
就是false
;a
为false
,!a
就是true
。 - 异或
^
:两个人的表决结果相同,就不通过;表决结果不同,才通过。所以a
和c
中,一真一假结果为真,其他的都是假。
其中,当使用与逻辑运算符时,在两个操作数都为true时,结果才为true,但是当得到第一个操作为false时,其结果就必定是false,这时候就不会再判断第二个操作了。
下面来看看代码吧:
4. 赋值运算符
赋值运算符是指将右边的操作数或运算结果赋值给左边的操作数。
来看看代码吧:
结果:
5. 关系运算符
关系运算符生成的是一个boolean(布尔)结果,它们计算的是操作数的值之间的关系。如果关系是真实的,结果为true(真),否则,结果为false(假)。
表格中的例子中,假设变量a为3,变量b为5:
来看看下面的代码:
强调:
==
和!=
适用于所有的基本数据类型,其他关系运算符不适用于boolean
,因为boolean值只有true
和false
,比较没有任何意义。==
和!=
也适用于所有对象,可以比较对象的引用
是否相同。
引用:Java 中一切都是对象,但操作的标识符实际是对象的一个引用。
例如:
在这里,创建的是引用
,不是对象
。创建引用后,一种安全的做法是对其进行初始化。
通常采用new操作符
生成一个新对象,然后将引用与该对象相关联。
来看下代码
在上面的代码中,各位可能认为输出的结果是什么呢,可能认为先是true
,再是false
,因为两个对象是相同的。尽管两个对象的内容相同,但它们的引用却不相同,==
和!=
比较的就是对象的引用,所以结果false
,再是true
,如下:
而想要比较对象的内容是否相同时,Java 提供了一个特殊的方法equals()
,它不适用于基本类型
,基本类型使用==和!=进行比较。
来看下下面的代码:
6. 条件运算符
同学们从上面我们可以发现,我们把各类运算符分为了单目运算符和双目运算符,这是什么意思呢?单目运算符(或一元运算符)是只需要有一个操作数的运算符,双目运算符(或二元运算符)是需要两个操作数的运算符。
那有没有三目运算符呢?
条件运算符?:
便是唯一的一个三目运算符了。
语法形式:布尔表达式?表达式1 : 表达式2
运算过程:如果布尔表达式的值为true
,则返回 表达式1
的值,否则返回 表达式2
的值。
例如:
instanceof 运算符
该运算符用于操作对象实例,检查该对象是否是一个特定类型(类类型或接口类型)。
instanceof运算符使用格式如下:
( Object reference variable ) instanceof (class/interface type)
如果运算符左侧变量所指的对象,是操作符右侧类或接口(class/interface)的一个对象,那么结果为真。
下面是一个例子:
String name = "James";boolean result = name instanceof String; // 由于 name 是 String 类型,所以返回真
如果被比较的对象兼容于右侧类型,该运算符仍然返回true。
7.Java运算符优先级
当多个运算符出现在一个表达式中,谁先谁后呢?这就涉及到运算符的优先级别的问题。在一个多运算符的表达式中,运算符优先级不同会导致最后得出的结果差别甚大。
例如,(1+3)+(3+2)*2,这个表达式如果按加号最优先计算,答案就是 18,如果按照乘号最优先,答案则是 14。
再如,x = 7 + 3 * 2;这里x得到13,而不是20,因为乘法运算符比加法运算符有较高的优先级,所以先计算3 * 2得到6,然后再加7。
下表中具有最高优先级的运算符在的表的最上面,最低优先级的在表的底部。
欢迎关注微信公众号:Java的学习之路
里面资料非常全,从java初级到高级都有,视频,电子书,面试宝典,简历模板,经典案例,源码分析程序员故事以及解决bug方法。。。。应有尽有,可以推荐大家一起学习下!!