第四章 运算符

优先级

程序员经常都会忘记其他优先级规则,所以应该用括号明确规定运算顺序

赋值

基本类型的赋值都是直接的,而不像对象,赋予的只是其内存的引用。举个例子,a = b ,如果 b 是基本类型,那么 赋值操作会将 b 的值复制一份给变量 a, 此后若 a 的值发生改变是不会影响到 b 的。

如果是为对象赋值,那么结果就不一样了。对一个对象进行操作时,我们实际上操作的是它的引用。所以我们将右边的对象赋予给左边时,赋予的只是该对象的引用。此时,两者指向的堆中的对象还是同一个。

算术运算符

通过在创建 Random 对象时提供种子(随机数生成器的初始化值,其始终为特定种子值产生相同的序列),让程序每次执行都生成相同的随机数,如此以来输出结果就是可验证的。

递增和递减

对于前递增和前递减(如 ++a 或 --a),会先执行递增/减运算,再返回值。而对于后递增和后递减(如 a++ 或 a--),会先返回值,再执行递增/减运算。

关系运算符

测试对象等价

// operators/Equivalence.java
public class Equivalence {public static void main(String[] args) {Integer n1 = 47;Integer n2 = 47;System.out.println(n1 == n2); // trueSystem.out.println(n1 != n2); // false}
}

== 和 != 比较的是对象引用,所以输出实际上应该是先输出 false,再输出 true(译者注:如果你把47改成128,那么打印的结果就是这样,因为 Integer 内部维护着一个 IntegerCache 的缓存,默认缓存范围是 [-128, 127],所以 [-128, 127] 之间的值用 == 和 != 比较也能能到正确的结果,但是不推荐用关系运算符比较。

逻辑运算符

短路

逻辑运算符支持一种称为“短路”(short-circuiting)的现象。整个表达式会在运算到可以明确结果时就停止并返回结果,这意味着该逻辑表达式的后半部分不会被执行到。

字面值常量

在文本值的后面添加字符可以让编译器识别该文本值的类型。对于 Long 型数值,结尾使用大写 L 或小写 l 皆可(不推荐使用 l,因为容易与阿拉伯数值 1 混淆)。大写 F 或小写 f 表示 float 浮点数。大写 D 或小写 d 表示 double 双精度。

十六进制(以 16 为基数),适用于所有整型数据类型,由前导 0x0X 表示,后跟 0-9 或 a-f (大写或小写)。

八进制(以 8 为基数)由 0~7 之间的数字和前导零 0 表示。

Java 7 引入了二进制的字面值常量,由前导 0b0B 表示,它可以初始化所有的整数类型。

下划线

Java 7 中有一个深思熟虑的补充:我们可以在数字字面量中包含下划线 **_**,以使结果更清晰。这对于大数值的分组特别有用。

指数计数法

在科学与工程学领域,e 代表自然对数的基数,约等于 2.718 (Java 里用一种更精确的 double 值 Math.E 来表示自然对数)。
在 Java 中看到类似“1.39e-43f”这样的表达式时,它真正的含义是“1.39 × 10的-43次方”。

位运算符

若两个输入位都是 1,则按位“与运算符” & 运算后结果是 1,否则结果是 0。若两个输入位里至少有一个是 1,则按位“或运算符” | 运算后结果是 1;只有在两个输入位都是 0 的情况下,运算结果才是 0。若两个输入位的某一个是 1,另一个不是 1,那么按位“异或运算符” ^ 运算后结果才是 1。按位“非运算符” ~ 属于一元运算符;它只对一个自变量进行操作(其他所有运算符都是二元运算符)。按位非运算后结果与输入位相反。例如输入 0,则输出 1;输入 1,则输出 0。

位运算符和逻辑运算符都使用了同样的字符,只不过数量不同。位短,所以位运算符只有一个字符。位运算符可与等号 = 联合使用以接收结果及赋值:&=,|= 和 ^= 都是合法的(由于 ~ 是一元运算符,所以不可与 = 联合使用)。

移位运算符

移位运算符面向的运算对象也是二进制的“位”。它们只能用于处理整数类型(基本类型的一种)。左移位运算符 << 能将其左边的运算对象向左移动右侧指定的位数(在低位补 0)。右移位运算符 >> 则相反。右移位运算符有“正”、“负”值:若值为正,则在高位插入 0;若值为负,则在高位插入 1。Java 也添加了一种“不分正负”的右移位运算符(>>>),它使用了“零扩展”(zero extension):无论正负,都在高位插入 0。这一运算符是 C/C++ 没有的。

移位可以与等号 <<=>>=>>>= 组合使用。

字符串运算符

运用 String + 时。若表达式以一个 String 类型开头(编译器会自动将双引号 "" 标注的的字符序列转换为字符串),那么后续所有运算对象都必须是字符串。
这种转换与数据的位置无关,只要当中有一条数据是字符串类型,其他非字符串数据都将被转换为字符串形式并连接。

类型转换

若将数据类型进行“向下转换”(Narrowing Conversion)的操作(将容量较大的数据类型转换成容量较小的类型),可能会发生信息丢失的危险。此时,编译器会强迫我们进行转型。 对于“向上转换”(Widening conversion),则不必进行显式的类型转换,因为较大类型的数据肯定能容纳较小类型的数据,不会造成任何信息的丢失。

除了布尔类型的数据, Java 允许任何基本类型的数据转换为另一种基本类型的数据。

截断和舍入

在执行“向下转换”时,必须注意数据的截断和舍入问题。

从 float 和 double 转换为整数值时,小数位将被截断。若你想对结果进行四舍五入,可以使用 java.lang.Mathround() 方法。

类型提升

如果我们对小于 int 的基本数据类型(即 char、byte 或 short)执行任何算术或按位操作,这些值会在执行操作之前类型提升为 int,并且结果值的类型为 int。若想重新使用较小的类型,必须使用强制转换(由于重新分配回一个较小的类型,结果可能会丢失精度)。通常,表达式中最大的数据类型是决定表达式结果的数据类型。float 型和 double 型相乘,结果是 double 型的;int 和 long 相加,结果是 long 型。

在 char,byte 和 short 类型中,我们可以看到算术运算符的“类型转换”效果。我们必须要显式强制类型转换才能将结果重新赋值为原始类型。

转载于:https://www.cnblogs.com/huangwenjie/p/11353521.html

20190814 On Java8 第四章 运算符相关推荐

  1. c语言中除法除以1000与1e3,北京航空航天大学C语言b第二讲(第三、四章)数据类型、运算符与表达式和最简单的C程序设计.ppt...

    <北京航空航天大学C语言b第二讲(第三.四章)数据类型.运算符与表达式和最简单的C程序设计.ppt>由会员分享,可在线阅读,更多相关<北京航空航天大学C语言b第二讲(第三.四章)数据 ...

  2. 20190827 On Java8 第十四章 流式编程

    第十四章 流式编程 流的一个核心好处是,它使得程序更加短小并且更易理解.当 Lambda 表达式和方法引用(method references)和流一起使用的时候会让人感觉自成一体.流使得 Java ...

  3. C++ Primer 学习笔记(第四章:表达式)

    2019独角兽企业重金招聘Python工程师标准>>> ##C++ Primer 学习笔记(第四章:表达式) [TOC] ###4.1 基础 左值和右值: 当一个对象被用作右值的时候 ...

  4. 第四章-数据共享与保护

    第四章-数据共享与保护 文章目录 第四章-数据共享与保护 1.作用域 2.对象生存期 静态数据成员 静态成员函数 3.类的友元 友元函数 友元类 4.共享数据的保护 常对象 常成员函数 常引用 Tip ...

  5. 大学计算机ppt操作表格,大学计算机应用基础第四章 电子表格软件Exc.ppt

    大学计算机应用基础第四章 电子表格软件Exc.ppt (47页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.9 积分 第四章电子表格Excel 20 ...

  6. 《Go语言圣经》学习笔记 第四章 复合数据类型

    <Go语言圣经>学习笔记 第四章 复合数据类型 目录 数组 Slice Map 结构体 JSON 文本和HTML模板 注:学习<Go语言圣经>笔记,PDF点击下载,建议看书. ...

  7. 第一个一千行总结-数据结构C复习--知识点总结1--一到四章

    总结 第一章: 数据结构包括:逻辑结构,储存结构, 运算集合 逻辑结构:分为线性(线性表, 栈, 队列, 字符串, 数组, 广义表)         非线性:树,图,网 储存结构:顺序储存和非顺序储存 ...

  8. 计算机检索技术与技巧的检索式为,第四章计算机检索技术和数据库检索方式.ppt...

    第四章计算机检索技术和数据库检索方式 第四章 计算机信息检索的基本技术与方法 一.计算机信息检索的基本技术: 布尔逻辑.截词检索.加权检索,位置算符等. 在进行计算机检索时,有时有一些比较复杂的课题, ...

  9. 第四章语法分析和语法分析程序

    第四章语法分析和语法分析程序 4.1_自顶向下的语法分析 4.1.1_自顶向下分析过程的基本特点 ①消除文法直接左递归 ②回溯的消除及LL(1)文法 4.1.2_递归下降法 4.1.3_预测分析法(也 ...

最新文章

  1. 模型验证的常用“武器”—ROC和AUC peiyang
  2. Linux的Apache报错(20014)Internal error: Error retrieving pid file logs/httpd.pid
  3. windows下安装subversion
  4. 物理内存不够用,临时增大Linux交换分区的方法
  5. VS2019中,一个解决方案拥有多个项目,如何快速选择启动项目
  6. 对《构建之法——现代软件工程》13-17章的困惑与思考
  7. 能源消耗总量计算公式_能源统计
  8. 移动计算为王——我眼中的下一代计算机产业
  9. JAVA版数字转人民币大写-四位数分隔法
  10. 赵鑫:强化学习在京东广告序列推荐中的应用
  11. aspcms用mysql_aspcms增加手机版支持与电脑公用一个后台
  12. 【Qt学习笔记】包含头文件确报错 does not name a type
  13. LeetCode刷题记 --- pta 7- 4
  14. html实现网格布局排版整齐的表格,想要排版布局好看又整齐,用网格排一下就行了吗?...
  15. 【吐槽】B站大量番剧下架,程序猿们这时都在干什么?
  16. C语言 单词长度 代码
  17. 跨境电商的支付方式有哪些?
  18. 2022年10月30日马丁·加德纳聚会线上活动重磅来袭!
  19. java就业前景,成都java培训,传智播客java培训
  20. 【直达本质讲运放】运放的“第一原理”式定量分析法

热门文章

  1. mysql jdbc官方,mysql_jdbc
  2. 系统学习机器学习之SVM(一)
  3. JWT教程_2 SpringSecurity与JWT整合
  4. 软件工程考研复试基本概念
  5. InnoDB 行格式
  6. Word2Vec入门
  7. 各大linux发行版安装宝塔桌面脚本
  8. Linux下GCC报:extern “C“ _declspec(dllexport)相关错误
  9. C/C++语言传参、返回参数知识点讲解
  10. 常见数据结构总结,持续更新...