Java表达式类型自动提升

简介:
【一道经典的 Java面试题】
  short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
  答案是:前者错,后者对。相信不管是否经历过java面试过,大家一定对这道题很熟悉。因为这道题确实太经典了,以至于成为了基本每个老师都会拿出来,当作课堂例题来讲。要说清这道题,首先看看java表达式类型转换规则。
  【java表达式类型转换】
  java是一门强类型语言,不仅每个变量具有指定的数据类型,它的表达式也有指定的数据类型。因此在不同类型之间进行赋值操作很容易遇到到类型转换的问题。
  在JAVA表达式中,如果进行运算的几个变量类型不一致,JAVA表达式会采取类型自动提升的操作。Java定义如下的自动提升规则:
  1. 所有byte型、short型和char型将被提升到int型。
  2. 整个算术表达式的数据类型自动提升到与表达式中最高等级操作数同样的类型。操作数的等级排列如下图所示,位于箭头右边类型的等级高于位于箭头左边类型的等级。以下是java表达式中类型提升等级。
  
  【复合赋值运算符包含的隐式类型转换】
  short s1 = 1; s1 = s1 + 1会引起编译错误,s1+1表达式类型会自动提升为int类型,而s1的声明类型为short类型,所以将一个int类型的值赋给short类型将引起编译错误。
  但short s1 = 1; s1 += 1;不会出错,因为表达式中使用了+=复合赋值运算符,复合赋值运算符包含了一个隐式的类型转换。s1 = s1 + 1和s1 += 1实际上并不等价。s1+=1实际上等于s1 = (s1的类型)s1+1,复合赋值运算符会自动将他计算的结果值强制类型转换为其左边变量的类型。


最新内容请见作者的GitHub页:http://qaseven.github.io/
相关文章
|
20天前
|
数据采集 数据可视化 安全
最详细Java正则表达式详解
本文系统讲解Java正则表达式核心语法、API用法及性能优化技巧,结合代码示例与实战场景,助你掌握文本处理利器,提升开发效率。
446 120
|
2月前
|
安全 Java 编译器
Java类型提升与类型转换详解
本文详解Java中的类型提升与类型转换机制,涵盖类型提升规则、自动类型转换(隐式转换)和强制类型转换(显式转换)的使用场景与注意事项。内容包括类型提升在表达式运算中的作用、自动转换的类型兼容性规则,以及强制转换可能引发的数据丢失和运行时错误。同时提供多个代码示例,帮助理解byte、short、char等类型在运算时的自动提升行为,以及浮点数和整型之间的转换技巧。最后总结了类型转换的最佳实践,如避免不必要的转换、使用显式转换提高可读性、金融计算中使用BigDecimal等,帮助开发者写出更安全、高效的Java代码。
136 0
|
2月前
|
安全 IDE Java
Java记录类型(Record):简化数据载体类
Java记录类型(Record):简化数据载体类
300 120
|
2月前
|
安全 Java API
Java中的Lambda表达式:简洁与功能的结合
Java中的Lambda表达式:简洁与功能的结合
359 211
|
2月前
|
安全 Java
Java中的Switch表达式:更简洁的多路分支
Java中的Switch表达式:更简洁的多路分支
419 211
|
2月前
|
Java 测试技术
Java浮点类型详解:使用与区别
Java中的浮点类型主要包括float和double,它们在内存占用、精度范围和使用场景上有显著差异。float占用4字节,提供约6-7位有效数字;double占用8字节,提供约15-16位有效数字。float适合内存敏感或精度要求不高的场景,而double精度更高,是Java默认的浮点类型,推荐在大多数情况下使用。两者都存在精度限制,不能用于需要精确计算的金融领域。比较浮点数时应使用误差范围或BigDecimal类。科学计算和工程计算通常使用double,而金融计算应使用BigDecimal。
918 102
|
11天前
|
Java 开发者
Java 函数式编程全解析:静态方法引用、实例方法引用、特定类型方法引用与构造器引用实战教程
本文介绍Java 8函数式编程中的四种方法引用:静态、实例、特定类型及构造器引用,通过简洁示例演示其用法,帮助开发者提升代码可读性与简洁性。
|
2月前
|
安全 算法 Java
Java泛型编程:类型安全与擦除机制
Java泛型详解:从基础语法到类型擦除机制,深入解析通配符与PECS原则,探讨运行时类型获取技巧及最佳实践,助你掌握泛型精髓,写出更安全、灵活的代码。
|
2月前
|
Java 编译器 API
Java Lambda表达式与函数式编程入门
Lambda表达式是Java 8引入的重要特性,简化了函数式编程的实现方式。它通过简洁的语法替代传统的匿名内部类,使代码更清晰、易读。本文深入讲解Lambda表达式的基本语法、函数式接口、方法引用等核心概念,并结合集合操作、线程处理、事件回调等实战案例,帮助开发者掌握现代Java编程技巧。同时,还解析了面试中高频出现的相关问题,助你深入理解其原理与应用场景。