《Java语言导学(原书第6版)》一3.2 运算符

简介: 本节书摘来华章计算机《Java语言导学(原书第6版)》一书中的第3章 ,第3.2节,[美] 雷蒙德·盖拉多(Raymond Gallardo), 斯科特·霍梅尔(Scott Hommel), 索亚·坎南(Sowmya Kannan), 琼尼·戈登(Joni Gordon), 沙伦·比奥卡·扎卡沃(Sharon Biocca Zakhour) 著 董笑菊 薛建新 吴 帆 译 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.2 运算符

学习了如何声明和初始化变量之后,下面看看如何利用这些变量来做点事情。学习Java程序语言的运算符是个很好的切入点。运算符是一类特殊的符号,它们执行1个、2个或3个运算对象上的特定操作,然后返回结果。
研究Java程序语言的运算符时,先了解这些运算符的优先级可能会有帮助。表3-2根据优先级顺序列出了所有的运算符。越靠近表的顶端,运算符的优先级越高。优先级较高的运算符先计算,相对较低的后计算。同一行的运算符优先级相等。当表达式中出现优先级相等的运算符时,计算规则如下:赋值运算符从右到左计算,除此之外,其他所有的二元运算符从左到右计算。
编程过程中,有些运算符的出现频率会比其他的要高。例如,赋值运算符(=)比不带符号的右移位运算符(>>>)常用得多。因此,后续讨论先关注那些经常使用的运算符,然后介绍那些不常用的运算符。讨论过程中,我们会给出相应的代码实例,这些代码都可以编译和运行。研究这些代码的运行结果有助于巩固所学知识。
image

3.2.1 赋值运算符、算术运算符和一元运算符

1.简单赋值运算符
简单赋值运算符(=)是最常用的运算符之一。Bicycle类中已经用过该运算符,它将右边的值指派给左边的运算对象:
image

该运算符也可用于指派对象引用。对象引用将在第4章中详细介绍。
2.算术运算符
Java程序语言提供执行加法、减法、乘法和除法运算的运算符。这是个很好的机会将它们与基本数学中的概念相对应。唯一的新符号可能是%,它将一个运算对象除以另外一个运算对象并返回余数,如表3-3所示。
image

用下述ArithmeticDemo程序来测试这些算术运算符:
image
image

其输出为:
image

算术运算符和简单赋值运算符组合在一起,可以创建复合赋值运算符。例如,x+=1;和x=x+1;,它们的功能都是将x的值加1。
加法(+)运算符也用于连接两个字符串,如ConcatDemo程序所示。
image

程序最后在标准输出上显示变量thirdString的值“This is a concatenated string.”。
3.一元运算符
一元运算符只要求一个运算对象,它们可以执行多种操作,如加1、减1、否定表达式、反转布尔值等操作,如表3-4所示。
image
image

下述UnaryDemo程序测试一元运算符。
image

递增/递减运算符都可以用作运算对象的前缀和后缀。result++;和++result;都将result的值加1。唯一的区别是前缀版本(++result)的计算结果为增加后的值,而后缀版本(result++)的计算结果为原始值。如果只是执行简单的递增或递减操作,选用哪种版本都没问题。但在大型的表达式中,递增/递减运算符的版本选择可能会造成很大的差异。
下述PrePostDemo程序举例说明前缀/后缀版本的一元运算符的使用方法:
image

3.2.2 等式运算符、关系运算符和条件运算符

  1. 等式运算符和关系运算符
    等式运算符和关系运算符用于判断一个运算对象大于、小于、等于或不等于另一个运算对象。大家对于其中的大部分运算符可能都很熟悉。切记,测试两个基本的值是否相等时,要用==而不是=。

image

用下面的ComparisonDemo程序来测试比较运算符:

image

  1. 条件运算符
    运算符&&和||在布尔表达式上执行条件与和条件或运算。这些运算符支持“短路”行为,也就是说,第二个运算对象只在需要时才计算。

image

用ConditionalDemo1程序来测试这些运算符:
image

另一种条件运算符是?:,通常认为是if-then-else语句(见3.4节)的简化版本。这个运算符也因有三个操作对象而被称为三元运算符。在下面这个例子中,该运算符的含义如下:如果someCondition为真,将value1的值赋给result;否则,将value2的值赋给result。
ConditionalDemo2测试?:运算符:
image

因为someCondition为真,所以程序在屏幕上输出1。如果?:运算符能提高代码的可读性,就用它来代替if-then-else语句(例如,当表达式紧凑且没有其他操作(如赋值)时)。

  1. 类型比较运算符instanceof
    instanceof运算符将对象与指定的类型进行比较,可用于测试对象是否为类的实例、子类的实例或者实现特定接口的类的实例。

下面的InstanceofDemo程序定义了一个父类(Parent)、一个接口(MyInterface)以及一个子类(Child),该子类继承Parent并实现接口MyInterface。
image

输出结果如下:
image

使用instanceof运算符时,切记null不是任何类的实例。

3.2.3 位运算符和移位运算符

Java程序语言支持在整数类型上执行位操作和移位操作,并提供相应的运算符。本小节介绍的运算符不是很常用,因此只做简短介绍,目的是告知大家还有这种运算符。
一元按位求补运算符(~)取反任意整数类型的位模式,将0转换成1,将1转换成0。例如,1个字节包含8个位,将该运算符运用于位模式为00000000的值,其位模式就转换为11111111。
带符号的左移运算符(<<)将位模式向左移,带符号的右移运算符(>>)将位模式向右移。运算符左边的运算对象是位模式,右边的运算对象是移动的位数。无符号的右移运算符(>>>)会在最左边移入0,而执行>>之后,最左边位置的值取决于其是否有符号。
按位与运算符(&)执行比特位上的与操作。按位异或运算符(^)执行比特位上的异或操作。按位或运算符(|)执行比特位上的或操作。
程序BitDemo使用按位与运算符将数字2打印到标准输出上。
image

3.2.4 小结

Java程序语言支持的运算符总结如下。

1.?简单赋值运算符
=     简单赋值运算符
2.?算术运算符
+     加法运算符(也用于字符串连接)
-     减法运算符
*     乘法运算符
/     除法运算符
%     取模运算符
3.?一元运算符
+     一元加运算符;表示正值,没有该运算符时也表示正值
-     一元减运算符;否定表达式
++     递增运算符;将值加1
--     递减运算符;将值减1
!     逻辑非运算符;反转布尔值
4.?等式和关系运算符
==     等于
!=     不等于
>     大于
>=     大于等于
<     小于
<=     小于等于
5.?条件运算符
&&     条件与(逻辑与)
||     条件或(逻辑或)
?:     三元运算符(if-then-else语句的简化版本)
6.?类型比较运算符
instanceof? 将对象和指定的类型进行比较
7.?位与移位运算符
~     ?一元按位求补
<<     ?带符号左移
>>     ?带符号右移
>>> ?无符号右移
&     ?按位与
^     ?按位异或
|     ?按位或

3.2.5 问题和练习:运算符

问题

  1. 代码片段“arrayOfInts[j]>arrayOfInts[j+1]”包含什么运算符?
  2. 考虑下述代码片段:
    image
a.代码执行前后i和n的值各是什么?
b.如果使用前缀版本(++i)代替后缀版本(i++),那么执行代码后,i和n的值是什么?
  1. 反转布尔值用什么运算符?
  2. 用什么运算符来比较两个值,=还是==?
  3. 解释代码“result=someCondition ? value1 : value2;”的含义。
    练习
  4. 使用复合赋值运算符重写下述程序:
    image

image

  1. 解释下述程序为什么会打印6两次:
    image

答案
相关答案参考
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/QandE/answers_operators.html

相关文章
|
4月前
|
JSON Java API
【干货满满】分享京东API接口到手价,用Java语言实现
本示例使用 Java 调用京东开放平台商品价格及优惠信息 API,通过商品详情和促销接口获取到手价(含优惠券、满减等),包含签名生成、HTTP 请求及响应解析逻辑,适用于比价工具、电商系统集成等场景。
|
2月前
|
Java
Java语言实现字母大小写转换的方法
Java提供了多种灵活的方法来处理字符串中的字母大小写转换。根据具体需求,可以选择适合的方法来实现。在大多数情况下,使用 String类或 Character类的方法已经足够。但是,在需要更复杂的逻辑或处理非常规字符集时,可以通过字符流或手动遍历字符串来实现更精细的控制。
261 18
|
2月前
|
存储 Java 索引
用Java语言实现一个自定义的ArrayList类
自定义MyArrayList类模拟Java ArrayList核心功能,支持泛型、动态扩容(1.5倍)、增删改查及越界检查,底层用Object数组实现,适合学习动态数组原理。
114 4
|
2月前
|
Java Go 开发工具
【Java】(4)五种运算符的说明(&&、||、>=、>、<=、<)、4种控制语句(if、for、while、dowhile)、输入和输出说明
扩展类的赋值运算符不改变运算结果类型,假设最初这个变量的的类型byte类型,无论怎么进行加或追减,最终该变量的数据类型还是byte类型。注:一个表达式中有多个运算符,运算符有优先级,不确定的加小括号,优先级得到提升。当布尔表达式的结果是false的时候,选择表达式2作为整个表达式的执行结果。当布尔表达式的结果是true的时候,选择表达式1作为整个表达式的执行结果。当用户输入的时候,并且最终敲回车键的时候,键入的信息会自动赋值给a。并且,连接运算之后的结果还是一个字符串类型。表达式1 : 表达式2。
152 1
|
3月前
|
存储 Java Apache
Java语言操作INI配置文件策略
以上步骤展示了基本策略,在实际项目中可能需要根据具体需求进行调整优化。例如,在多线程环境中操作同一份配置时需要考虑线程安全问题;大型项目可能还需考虑性能问题等等。
192 15
|
4月前
|
存储 缓存 算法
Java数据类型与运算符深度解析
本文深入解析Java中容易混淆的基础知识,包括八大基本数据类型(如int、Integer)、自动装箱与拆箱机制,以及运算符(如&与&&)的使用区别。通过代码示例剖析内存布局、取值范围及常见陷阱,帮助开发者写出更高效、健壮的代码,并附有面试高频问题解析,夯实基础。
|
4月前
|
算法 Java
Java语言实现链表反转的方法
这种反转方法不需要使用额外的存储空间,因此空间复杂度为,它只需要遍历一次链表,所以时间复杂度为,其中为链表的长度。这使得这种反转链表的方法既高效又实用。
432 0
|
4月前
|
JSON Java API
【干货满满】分享拼多多API接口到手价,用Java语言实现
本方案基于 Java 实现调用拼多多开放平台商品详情 API,通过联盟接口获取商品到手价(含拼团折扣与优惠券),包含签名生成、HTTP 请求及响应解析逻辑,适用于电商比价、导购系统集成。
|
4月前
|
JSON Java API
【干货满满】分享淘宝API接口到手价,用Java语言实现
本文介绍了如何使用 Java 调用淘宝开放平台 API 获取商品到手价,涵盖依赖配置、签名生成、HTTP 请求与响应解析等核心实现步骤。
|
5月前
|
JavaScript Java Go
Go、Node.js、Python、PHP、Java五种语言的直播推流RTMP协议技术实施方案和思路-优雅草卓伊凡
Go、Node.js、Python、PHP、Java五种语言的直播推流RTMP协议技术实施方案和思路-优雅草卓伊凡
379 0