从零开始学java系列第一季第五期:运算符和表达式

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、位运算符

位运算符用于对整数类型操作数的二进制编码的位运算

位运算符可以用于整数类型和字符类型

下面对位运算符做一个基本介绍

  1. “ ~ ” 表示按位非,一元运算符
  2. “ & ” 表示按位与,二元运算符
  3. “ | ” 表示按位或,二元运算符
  4. “ ^ ” 表示按位异或,二元运算符
  5. “ >> ” 表示左移,二元运算符
  6. " << " 表示右移,二元运算符
  7. “ >>> ” 表示右移且空出的位用0填充,二元操作数
  8. “ &= ” 与运算的简写形式,与前面提到的算术运算符的简写形式用法相同,后面不再赘述
  9. “ |= ” 非运算的简写形式
  10. “ ^= ” 异或的简写形式
  11. “ >>= ” 左移的简写形式
  12. “ <<= ” 右移的简写形式

原码,反码,补码的概念对于位运算来说,三码的概念是必须掌握的

  • 二进制的最高位是符号位:0表示正数,1表示负数
  • 正数的原码,反码,补码都一样(三码合一)
  • 负数的反码 = 它的原码符号位不变,其它为取反(0->1,1->0)
  • 负数的补码 = 它的反码+1
  • 0的反码,补码都是0
  • 在计算机运算的时候,都是以补码的方式来运算的,它可以把正数和负数统一起来

关于位运算的使用请参考【位运算详解
这篇虽然是用c语言来表达的,但对于二进制的位运算来说,java和c语言是一样的,并没有区别

1.4、关系运算符

关系运算符主要用于判断操作数之间的关系,比如比较两个数的大小啦,判断两个数书否相等啦等等,关系运算的结果只有两个,分别为truefalse,也就是boolean类型

常用的关系运算符如下:

  1. “ == ” 用于判断两个操作数是否相等,二元运算符
  2. “ != ” 用于判断两个操作数是否不相等,二元运算符
  3. " > " 表示大于关系,二元运算符
  4. " < " 表示小于关系,二元运算符
  5. " >= " 表示不小于关系,二元运算符
  6. “ <= ” 表示不大于关系,二元运算符

这里需要注意的是:刚入门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的过程中,基本就没用过位运算。当然,如果你有兴趣的话也可以了解一下。

嗯,到此呢,这篇文章就结束了!如果这篇文章对您有一定的帮助的话,还请多多点赞、关注、收藏支持一下,您的关注是我创作的最大动力,感谢您的观看!!!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值