Java零基础快速入门|运算符

本文章主要内容:
运算符概述
算术运算符
关系运算符
逻辑运算符
赋值运算符
条件运算符
字符串连接运算符
难点疑惑
学习目标
掌握常见的Java 运算符的使用,包括算术运算符、关系运算符、逻辑运算符、赋值运算符、条件运算符、字符串连接运算符。
知识框架

运算符概述
运算符是指对操作数的运算方式。组成表达式的Java 操作符有很多种(什么是操作数和操作符,例如 1+2,其中 1 和2 都是操作数,+是操作符,操作符和操作数联合起来构成表达式)。
运算符按照其要求的操作数数目来分,可以有单目运算符(1 个操作数)、双目运算符(2 个操作数)和三目运算符(3 个操作数)。
运算符按其功能来分,有算术运算符、赋值运算符、关系运算符、逻辑运算符、位运算符、条件运算符、字符串连接运算符和其他运算符。
常见的 运算符如下所示:

每个编程语言当中都有运算符,基本上都是通用的,这么多的运算符,它们同时出现的时候有优先级吗?答案是有的。那么如果不确定它们的优先级怎么办,其实很简单,直接加小括号就可以了,添加有小括号优先级一定是高的,所以优先级不需要死记硬背,不确定就加小括号,例如:1 + 2 * 3,想确保先求和,你就需要这样写:(1+2)*3。
运算符详解
算术运算符
算术运算符包括:+(两个数字求和)、-(两个数字相减)、*(两个数字乘积)、/(两个数字相除)、%(两个数字取模或者求余)、++(单目运算符,对数字自加 1)、--(单目运算符,对数字自减 1)。
对于初学者来说,可能%、++、--比较生疏一些,我们重点来学习一下,请看以下代码(注意代码中的注释信息):



运行结果如下图所示:

通过以上代码的学习,我们得知
两个 int 类型数据进行数学运算之后的结果一定是 int 类型;
++或--可以出现在变量前也可以是变量后;
++无论出现在变量前还是变量后,只要执行了++,那么变量必然会自加1;
++出现在变量后会先进行赋值运算, 再自加1;
++出现在变量前会先自加1,再进行赋值运算。
那么,大家思考一下以下代码的执行结果是什么?

关系运算符
关系运算符主要是完成数据和数据之间的比较,比如:5>3,结果是 true(真),5>10, 结果是 false(假),那么关系运算符都有哪些呢?>、>=、<、<=、==、!=。
关系运算符是比较简单容易理解的,我们来看一段代码(注意代码中的注释):

通过以上代码可以看出,任何一个关系运算符的运算结果都是布尔类型,最后的结果不是true 就是false,没有其他值,并且我们也看到 a 变量和b 变量在比较的时候是拿着变量当中保存的值进行比较。也就是说 a == b 实际上是拿着a 变量中保存的 10 和b 变量中保存的10 进行比较,看它们是否相等。
逻辑运算符
逻辑运算符主要包括逻辑与(&),逻辑或(|),逻辑异或(^),短路与(&&),短路 或(||)。所有逻辑运算符的特点是操作数都是布尔类型,并且最终的运算结果也是布尔类型。逻辑运算符的基本运算规则如下表所示:

接下来我们来研究一段代码,重点看看短路是如何发生的(注意看注释信息):


通过以上的测试,可以得出短路与(&&)在左边的表达式结果为 false 的时候,右边的表达式则不再执行,这种现象被称为短路现象,这种机制也显得短路与比较智能一些,效率更高一些,所以在实际开发中短路与(&&)的使用率要比逻辑与高一些。但这并不是绝对的,有的时候也可能会选择使用逻辑与(&),这取决于你是否期望右边的表达式一定执行。
大家思考一个问题,短路或(||)在什么情况下会发生短路现象呢?
赋值运算符
赋值运算符目前也是只需要掌握=、+=、-=、*=、/=、%=,其它和二进制相关的内容也是到后面遇到的时候再详细学习。
赋值类的运算符包括基本赋值运算符(=)和扩展的赋值运算符(+=、-=、*=、/=、%=)。
我们来看一段代码:

x += 1 和x = x + 1 真的是完全相同吗?我们来看下面的代码:


根据以上代码测试得出,对于扩展类的赋值运算符在运算的过程中不会改变运算的结果类型,也就是说byte b = 100; b += 1000;b 变量最初是byte 类型,最后的运算结果还是一个byte 类型。这是一条固定的语法规则,大家记住就行了,以后在使用扩展类赋值运算符的时候要谨慎,不小心就会精度损失的。
条件运算符
条件运算符属于三目运算符,它的语法结构是:布尔表达式;表达式1;表达式2。
它的运行 原理是这样的,先判断布尔表达式的结果是true 还是false,如果是 true,则选择表达式1 的结果作为整个表达式的结果,反之则选择表达式 2 的结果作为整个表达式的结果。
来看一段代码:

实际上条件运算符和后期要学习的控制语句if 可以达到同等效果。在实际开发中灵活运用条件运算符会让你的代码看起来更加简洁清凉,达到意想不到的效果。
字符串连接运算符
在java 语言中所有的字符串都使用半角双引号括起来的,字符串属于引用数据类型,不属于基本数据类型的范畴,怎么定义一个字符串的变量呢?
例如:String name = “jack”;,这就类似于int i = 10;是一样的,int 是一种整数类型,i 是变量,10 是整数型字面量。
那么String则是一种字符串类型,name 是变量,”jack”是字符串型字面量。在Java编程中对字符串的操作是非常频繁的,例如字符串的连接操作,此时就需要使用“+”字符串连接运算符。
实际上“+”运算符在Java语言中有两个作用:
对数字进行求和运算
字符串连接运算
那么它在什么时候是进行求和,什么时候又进行字符串连接呢?
大家可以这样进行区分,当“+”运算的时候,两边的操作数都是数字的话,一定会进行求和运算,只要其中有一个操作数是字符串类型,那么一定会进行字符串拼接运算,字符串拼接之后的结果还是字符串类型。
需要注意的是,当一个表达式当中有多个“+”,并且在没有小括号的前提下,遵循自左向右的顺序依次执行。我们来看一段程序:


对于程序System.out.println(a + " + " + b + " = " + a + b);的分析见下图:

对于程序System.out.println(a + " + " + b + " = " + (a + b));的分析见下图:

总之,使用“+”进行字符串拼接在开发中使用太频繁了,大家一定要将其掌握,尤其是怎么将一个变量放到字符串当中,你还记得以上程序的口诀吗?
除了以上所讲的运算符之外,实际上还有其它运算符,例如位运算符主要操作二进制位的, 还有运算符 instanceof、new 等。这里就不再赘述了,当前使用较少,后期使用到的时候我们再看。
难点解惑
本章节的难点主要还是++运算符的使用,例如以下代码:

我们对以上程序进行分析,k 变量等于10,输出 k++,我们可以将 System.out.println(k++) 这行代码进行拆解,可以拆解为两行代码:int temp = k++; System.out.println(temp);,也就是说实际上输出k++就是输出temp,根据之前所学规则,temp 等于10,所以 System.out.println(k++) 会输出 10。不过当这行代码执行结束之后k 就不再是 10 了,变成了 11。
我们继续再向下分析:System.out.println(++k)。这行代码同样也可以拆分为两行代码:int temp2 = ++k; System.out.println(temp2);。其中 k 已经等于11 了,根据以上所学规则 temp2 的值是 12,所以最终输出 12。
我们对以上的程序进行编译并运行,来看一下我们分析是否正确,请看下图:

通过以上程序的运行我们可以看出以上的分析是没有问题的,所以对于初学者来说,这块内容确实是一个不太好理解的地方。
小结
本章节内容需要大家掌握开发中常用运算符的使用,包括算术运算符、关系运算符、逻辑运算符、赋值运算符、条件运算符、字符串连接运算符。实际上除了以上所讲运算符之外,还有其它运算符,比如位运算符、instanceof、new 等运算符,在当下使用较少,后期用到的时候再进行学习。
本章节内容具有通用性,不仅仅是在Java 中可以使用,在其他的编程语言中也可以使用。运算符在实际的开发中使用频率很高,因为软件存在的目的就是为了解决数据的处理。在这里 想和大家说的是,学好每一个运算符的用法,为后面的学习打下扎实的基础。
最后附Java零基础视频教程给大家,配合学习效果更佳!!

