《Java 7程序设计入门经典》一2.15 表达式

简介: 本节书摘来自华章出版社《Java 7程序设计入门经典》一书中的第2章,第2.15节,作者 (美)Herbert Schildt Dale Skrien,更多章节内容可以访问云栖社区“华章计算机”公众号查看

2.15 表达式

运算符、变量和字面量都是表达式(expression)的组成部分。当在程序中遇到表达式时,会计算该表达式。因为它在前面的程序中已经用过,所以读者可能对表达式已有相当的直观理解。另外,Java的表达式也与代数中的表达式类似。但是,现在还是要讨论表达式的一些方面。

2.15.1 表达式中的类型转换

在表达式中,可能将两种或多种不同类型但互相兼容的数据混合。例如,因为short类型和long类型都是数值类型,所以在表达式中将它们混合使用。当一个表达式中混合不同种类的数据,它们会转换为同一类型。这是通过Java的类型提升规则(type promotion rule)来完成的。
首先,所有的char值、byte值、short值都提升为int类型。其次,当一个操作数是long类型时,整个表达式提升为long类型。如果一个操作数是float类型的操作数,整个表达式提升为float类型。如果有任何操作数是double类型,结果是double类型。
类型提升只使用于在计算表达式中遇到的值,理解这一点很重要。例如,在表达式内byte类型提升为int类型,但在表达式外变量仍然为byte类型。类型提升只影响表达式的计算。
但是,类型提升会导致不希望的结果。例如,当一个算术运算与两个byte值有关时,下列情况发生:首先,将byte类型的操作数提升为int类型。当操作发生时,生成int类型的结果。于是,对两个byte值进行运算的结果是int型。这与直观感觉不同。考虑以下程序:
image

与直观感受相反,当把bb赋给变量i时,不需要强制类型转换,因为在计算表达式时,变量b已经提升为int类型。但是,如果将bb赋给b,需要使用强制类型转换将类型变回byte类型。记住,如果获得了与期望不同的类型,在表达式上会有提示不兼容的错误消息。否则,一切就都好。
同样的情况在执行与char类型有关的操作时也会发生。例如,在下面的代码片段中,由于表达式将变量ch1和ch2提升为int类型,需要使用强制类型转换转回char类型。
image

如果没有强制类型转换,将ch1加到ch2的结果就是int类型,不能赋给变量ch1。
强制类型转换不仅在赋值中的类型转换有用。例如,考虑下面的示例。它使用强制类型转换将数据转化为double类型来获得结果的小数部分。若不使用强制类型转换,则涉及的除法仅是整数除法。
image

程序输出如下所示:
image

2.15.2 空白和圆括号

在Java的表达式中,可以使用水平制表符和空格增加可读性。例如,下面两个表达式完全相同,但后者更易阅读:
image

圆括号从代数角度改变了其中运算的优先级。使用额外的圆括号不会导致错误,也不会降低表达式的执行速度。鼓励大家使用圆括号来使运行顺序更明确,便于后来人阅读程序。例如,请判断以下两个表达式中哪个更容易阅读:
image

相关文章
|
5天前
|
SQL IDE 算法
《从头开始学java,一天一个知识点》之:运算符与表达式:算术、比较和逻辑运算
**你是否也经历过这些崩溃瞬间?** - 看了三天教程,连`i++`和`++i`的区别都说不清 - 面试时被追问"`a==b`和`equals()`的区别",大脑突然空白 - 写出的代码总是莫名报NPE,却不知道问题出在哪个运算符 这个系列为你打造Java「速效救心丸」,每天1分钟,地铁通勤、午休间隙即可完成学习。直击高频考点和实际开发中的「坑位」,拒绝冗长概念,每篇都有可运行的代码示例。明日预告:《控制流程:if-else条件语句实战》。
24 6
|
3月前
|
安全 Java API
Java中的Lambda表达式:简化代码的现代魔法
在Java 8的发布中,Lambda表达式的引入无疑是一场编程范式的革命。它不仅让代码变得更加简洁,还使得函数式编程在Java中成为可能。本文将深入探讨Lambda表达式如何改变我们编写和维护Java代码的方式,以及它是如何提升我们编码效率的。
|
3月前
|
Java API 开发者
Java中的Lambda表达式与Stream API的协同作用
在本文中,我们将探讨Java 8引入的Lambda表达式和Stream API如何改变我们处理集合和数组的方式。Lambda表达式提供了一种简洁的方法来表达代码块,而Stream API则允许我们对数据流进行高级操作,如过滤、映射和归约。通过结合使用这两种技术,我们可以以声明式的方式编写更简洁、更易于理解和维护的代码。本文将介绍Lambda表达式和Stream API的基本概念,并通过示例展示它们在实际项目中的应用。
|
4月前
|
安全 Java API
Java中的Lambda表达式与Stream API的高效结合####
探索Java编程中Lambda表达式与Stream API如何携手并进,提升数据处理效率,实现代码简洁性与功能性的双重飞跃。 ####
50 0
|
4月前
|
Java API 开发者
Java中的Lambda表达式:简洁代码的利器####
本文探讨了Java中Lambda表达式的概念、用途及其在简化代码和提高开发效率方面的显著作用。通过具体实例,展示了Lambda表达式如何在Java 8及更高版本中替代传统的匿名内部类,使代码更加简洁易读。文章还简要介绍了Lambda表达式的语法和常见用法,帮助开发者更好地理解和应用这一强大的工具。 ####
|
4月前
|
并行计算 Java 编译器
深入理解Java中的Lambda表达式
在Java 8中引入的Lambda表达式,不仅简化了代码编写,还提升了代码可读性。本文将带你探索Lambda表达式背后的逻辑与原理,通过实例展示如何高效利用这一特性优化你的程序。
|
4月前
|
搜索推荐 Java API
探索Java中的Lambda表达式
本文将深入探讨Java 8引入的Lambda表达式,这一特性极大地简化了代码编写,提高了程序的可读性。通过实例分析,我们将了解Lambda表达式的基本概念、使用场景以及如何优雅地重构传统代码。文章不仅适合初学者,也能帮助有经验的开发者加深对Lambda表达式的理解。
|
4月前
|
Java 开发者
探索Java中的Lambda表达式
【10月更文挑战第43天】本文将深入浅出地介绍Java中的Lambda表达式,通过实际代码示例,带领读者理解其背后的原理及应用场景。Lambda表达式不仅简化了代码,还提高了开发效率,是Java开发者必备的技能之一。
|
4月前
|
Java
探索Java中的Lambda表达式
【10月更文挑战第37天】本文将带你深入理解Java的Lambda表达式,从基础语法到高级特性,通过实例讲解其在函数式编程中的应用。我们还将探讨Lambda表达式如何简化代码、提高开发效率,并讨论其在实际项目中的应用。
|
4月前
|
Java API
Java中的Lambda表达式与函数式编程####
【10月更文挑战第29天】 本文将深入探讨Java中Lambda表达式的实现及其在函数式编程中的应用。通过对比传统方法,我们将揭示Lambda如何简化代码、提高可读性和维护性。文章还将展示一些实际案例,帮助读者更好地理解和应用Lambda表达式。 ####

热门文章

最新文章