1、运算符和表达式
参与运算的常量、变量、表达式统称为操作数。连接操作数完成运算的符号称为运算符。举例说明:
15 + b
中,+ 就是运算符,15和b就是操作数
表达式是由操作数和运算符按一定的语法形式组成的符号序列
运算符通常分为:算术运算符、位运算符、逻辑运算符、关系运算符这4类,而根据操作数的不同又分为:一元运算符、二元运算符
、三元运算符...
1.1、 赋值运算符
在介绍其他的运算符前,我们先来了解一下赋值运算符“=”,吾看来,这应该是最简单的一个运算符。在前面文章的例子中也频繁使用过,其作用就是给变量赋值,这里吾就不再过多赘述
1.2、算术运算符
算术运算符,顾名思义就是用来做数学表达式中的算术运算的
。除了boolean类型以为,其他的类型均可以使用算术运算符。
算术运算符包括:基本算术运算符、简写算术运算符以及自增自减运算符
-
基本算术运算符
1. “ + ”:表示加法,二元运算符 2. “ - ”:对于`二元操作数代表减法`,对于`一元操作数代表取负` 3. “ * ”:代表乘法,二元运算符 4. “ / ”:代表除法,二元运算符 5. “ % ”:代表取模,二元运算符
-
简写算术运算符
——所谓简写算术运算符,就是对一个算术运算的简写形式
吾以一例,使予立知晓:
var1 = var1 + var2 等价于 var1 += var2
对于基本算术运算符来说,都可以简写算术运算,除了例子中提到的
"+="
,还有-=、/=、*=、%=
。 -
自增、自减运算符
对于自增++
和自减--
来说,无外乎两种形式,设一个变量int var = 10;
那么对于自增运算符来说,它可以有两种表现形式:var++、++var
,吾将其二者称之为后加加、前加加
,它们的区别在于先赋值还是先运算
,对于前++来说,是先赋值后运算,而对于后++来说,则是先运算后赋值。什么意思呢?吾以一例,使予立知晓:
int var = 0;//赋值运算符将var赋值为0
int let = 0;//赋值运算符将let赋值为0
var = let++;
var = ++let;
-
根据什么的例子,判断一下最后var的值,下面吾来进行分析:
对于第一个递增表达式
来说,++在后面,var = let++
实际上等价于var = let; let = let +1;
所以这时候的var实际上还是0,因为let是先对var进行了运算赋值,然后才进行自我赋值。
对于第二个递增运算符
来说,let已经自增了一次,此时的let值为1,并且是前++,所以是先赋值,后运算,var = ++let
实际上等价于let = let + 1; var = let
,这时候的let = 2,let = 2的值又赋给了var,所以最后var的值为2 -
注意
在递增递减运算符中需要注意的是前++与后++的区别只有在算术表达式中才能体现
,对于一个单独的递增运算来说,如var++;不论++在前还是在后,都会进行+1操作。- 对于
byte、short、char
等比int类型级别低的数据类型,上面的转换关系是不成立的,因为递增递减的递增\减值为1,1默认是常量值,但这并不代表它不能使用++或–,只不过我们不能用上面的那种转换思想来看待它,对于这里有一个比较复杂的概念,涉及到JVM对不同数据类型的分配存储问题,就好比我们能将一个10赋值给byte类型,而常量10是默认为int类型的,但它并不会报错。有兴趣的可以参考一下这篇文章java中常量的赋值问题。
1.3、位运算符
位运算符用于对整数类型操作数的二进制编码的位运算
。
位运算符可以用于整数类型和字符类型
下面对位运算符做一个基本介绍
- “ ~ ” 表示按位非,一元运算符
- “ & ” 表示按位与,二元运算符
- “ | ” 表示按位或,二元运算符
- “ ^ ” 表示按位异或,二元运算符
- “ >> ” 表示左移,二元运算符
- " << " 表示右移,二元运算符
- “ >>> ” 表示右移且空出的位用0填充,二元操作数
- “ &= ” 与运算的简写形式,与前面提到的算术运算符的简写形式用法相同,后面不再赘述
- “ |= ” 非运算的简写形式
- “ ^= ” 异或的简写形式
- “ >>= ” 左移的简写形式
- “ <<= ” 右移的简写形式
原码,反码,补码的概念对于位运算来说,三码的概念是必须掌握的
- 二进制的最高位是符号位:0表示正数,1表示负数
- 正数的原码,反码,补码都一样(三码合一)
- 负数的反码 = 它的原码符号位不变,其它为取反(0->1,1->0)
- 负数的补码 = 它的反码+1
- 0的反码,补码都是0
在计算机运算的时候,都是以补码的方式来运算的,它可以把正数和负数统一起来
关于位运算的使用请参考【位运算详解】
这篇虽然是用c语言来表达的,但对于二进制的位运算来说,java和c语言是一样的,并没有区别
1.4、关系运算符
关系运算符主要用于判断操作数之间的关系,比如比较两个数的大小啦,判断两个数书否相等啦等等,关系运算的结果只有两个,分别为true
和false
,也就是boolean类型
常用的关系运算符如下:
- “ == ” 用于判断两个操作数是否相等,二元运算符
- “ != ” 用于判断两个操作数是否不相等,二元运算符
- " > " 表示大于关系,二元运算符
- " < " 表示小于关系,二元运算符
- " >= " 表示不小于关系,二元运算符
- “ <= ” 表示不大于关系,二元运算符
这里需要注意的是:刚入门java的人容易把赋值运算符+
和关系运算符++
搞混。另外,对于==
和!=
来说,可以作用所有的数据类型,而其他的关系运算符只能作用于除布尔类型以外的数据类型·
,毕竟,你无法比较true和false的大小,不是吗?
为了尽可能的做到详细,吾还是稍微写一个小demo吧,demo如下:
public static void main(String[] args){
int a = 10,b = 20;
boolean b = a>b;//这里用的大于运算符,通过比较a、b的大小,如果a>b,返回true,否则返回false
}
1.5、三元运算符
三元运算符只有一个——?
,三元运算符的格式如下:
表达式1 ?表达式2 : 表达式3
如果表达式1的值为true,那么就返回表达式2,否则返回表达式3
举个例子:
public static void main(String[] args){
int a = 3;
int b = 4;
int c = a > b ? a : b
}
分析上面的例子, a>b的结果为true,所以执行返回结果为?
后的第一个表达式,注意:这里的表达式既可以为常量,也可以是表达式
除了基本的使用外,我们还需要知道三元运算符的一些细节问题:详情请参考这篇【三元运算符的嵌套说明】
1.6、运算符的优先级
当有多个运算符参与同一个运算时,我们就需要考虑到运算符的优先级问题了,就比如数学中,当一个式子中出现了加减乘除,那么我们就要遵循先乘除后加减的规则,在java中,同样也是如此。
各运算符的优先级如下表所示:
从上面的表中我们可以看到,()的优先级是最高的,所以当我们想改变一个表达式的优先级时,就可以用()把它括起来,就和数学中一样,如果4+3*2,我们希望4+3先计算,那么将4+3括起来就行了-(4+3)* 2
2、总结
本篇文章主要介绍了对运算符的使用以及一些基本操作,个人认为,除了运算符的优先级以及三元运算符以外,其他的运算符知识点都不用刻意去记,无论是赋值运算符、基本运算符还是关系运算符,都是你学java的过程中经常要使用的,所谓日积月累嘛,慢慢的就能记住了,而对于位运算符来说,目前只需要有一定的了解就行了,因为确实不常用,在我学java的过程中,基本就没用过位运算。当然,如果你有兴趣的话也可以了解一下。
嗯,到此呢,这篇文章就结束了!如果这篇文章对您有一定的帮助的话,还请多多点赞、关注、收藏支持一下
,您的关注是我创作的最大动力,感谢您的观看!!!