`
zhiziwei
  • 浏览: 3572 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

java表达式类型的自动提升

阅读更多

转自:http://www.blogjava.net/hyperjava/articles/241839.html

 

当一个java算术表达式中包含多个基本类型的值时,整个算术表达式的数据类型将发生自动提升。Java定义如下的自动提升规则:
1. 所有byte型、short型和char型将被提升到int型。
2. 整个算术表达式的数据类型自动提升到与表达式中最高等级操作数同样的类型。操作数的等级排列如下图所示,位于箭头右边类型的等级高于位于箭头左边类型的等级。

 

下面程序示范了一个典型的错误:

//定义一个short类型变量
short sValue = 5;
//表达式中的sValue将自动提升到int类型,则右边的表达式类型为int
//将一个int类型赋给short类型的变量将发生错误。
sValue = sValue - 2;

 

上面中的 sValue -2表达式的类型将被提升到 int类型,这样就是把右边的 int型值赋给左边的 short型变量,从而引起错误。

 

下面代码是表达式类型自动提升的正确示例代码(程序清单同上):

byte b = 40;
char c = 'a';
int i = 23;
double d = .314;
//右边表达式中在最高等级操作数为d(double型)
//则右边表达式的类型为double型,故赋给一个double型变量
double result = b + c + i * d;
//将输出144.222
System.out.println(result);

 

必须指出的,表达式的类型将严格保持和表达式中最高等级操作数相同的类型,下面代码中两个int整数进行除法运算,即使无法除尽,也将得到一个int结果(程序清单同上):

int val = 3;
//右边表达式中2个操作数都是int,故右边表达式的类型为int
//因此,虽然23/3不能除尽,依然得到一个int整数
int intResult = 23 / val;
//将输出7
System.out.println(intResult);

 从上面程序中可以看出,当两个整数进行除法运算时,如果不能整数,得到结果将是把小数部分截断取整后的整数。

如果表达式中包含了字符串,则又是另一番情形了:因为把加号(+)放在字符串和基本类型值之间时,这个加号是一个字符串连接运算符,而不是进行加法运算。看如下代码:

//输出字符串Hello!a7
System.out.println("Hello!" + 'a' + 7);
//输出字符串104Hello!
System.out.println('a' + 7 + "Hello!");

 对于第一个表达式"Hello!" + 'a' + 7,先进行"Hello!" + 'a'的运算,将把'a'转换成字符串,将拼接成字符串Hello!a,接着进行"Hello!a" + 7的运算,这也是一个字符串连接运算,得到结果是Hello!a7。对于第二个表达式,先进行'a' + 7加法运算,其中'a'自动提升到int型,变成a对应的ASCII值:97,从97 + 7将得到104,然后进行104 + "Hello!",104会自动转换成字符串,将变成两个字符串的连接运算,从而得到104Hello!。

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Java表达式类型自动提升

    要说清这道题,首先看看java表达式类型转换规则。  【java表达式类型转换】  java是一门强类型语言,不仅每个变量具有指定的数据类型,它的表达式也有指定的数据类型。因此在不同类型之间进行赋值操作很容易遇到...

    Java表达式求值2.0

    "Java表达式求值2.0"可能是指一个优化过的版本,用于更高效地处理Java中的数学或逻辑表达式。这个版本可能是针对早期版本的错误进行了修复,或者增加了新的功能。 在Java中,表达式求值通常涉及以下知识点: 1. **...

    正则表达式自动生成器 V2.0.0.1 官方多语版

    正则表达式自动生成器V2.0.0.1是一款强大的工具,旨在帮助用户方便快捷地构建和测试正则表达式。它提供了多语言支持,使得不同地区的用户都能无障碍地使用。在IT领域,正则表达式是进行文本处理、数据验证和搜索替换...

    Java 正则表达式库

    Java正则表达式库是Java开发中不可或缺的一部分,它为开发者提供了一种强大的文本匹配工具。在Java中,正则表达式(Regular Expression)是一种...对于Java开发者来说,熟练掌握正则表达式是提升工作效率的重要技能。

    Aviator是一个高性能java表达式求值程序

    4. **类型自动转换**:Aviator自动处理不同类型之间的转换,简化了表达式的编写。 5. **异常处理**:内置的异常处理机制可以在表达式执行出错时抛出异常,方便调试和问题定位。 四、Aviator的使用示例 例如,假设...

    java 正则表达式应用jar包 regex-smart.jar

    例如,可能有一个`validateEmail(String email)`方法,只需要传入电子邮件地址,就可以自动检查其格式是否正确,而无需手动编写复杂的正则表达式。 此外,正则表达式还支持多种元字符和预定义字符类,如`.`, `^`, `...

    java8 lambda表达式学习总结

    1. **类型推断**:Java 8 可以自动推断Lambda表达式的参数类型,因此在许多情况下,我们无需显式声明类型。 2. **捕获外部变量**:Lambda 表达式可以访问和修改其定义范围内的 final 或基本类型的局部变量。 3. **...

    java-正则表达式-分组引用介绍

    ### Java中的正则表达式:分组引用介绍 #### 概述 正则表达式是计算机科学中一种非常强大的文本处理工具,在Java等编程语言中广泛应用于字符串匹配、搜索替换等场景。当需要对正则表达式的部分结果进行进一步处理...

    Java 8 lambda表达式

    在Java 8中,编译器可以自动推断lambda表达式中参数的类型,所以大多数情况下我们不需要显式声明类型。 8. **捕获外部变量** Lambda表达式可以访问其所在作用域中的局部变量,但只有当这些变量是final或实际上...

    Java正则表达式简单应用

    Java正则表达式是编程语言Java中用于处理字符串的强大工具,它允许我们通过模式匹配来查找、替换或分割文本。这篇博客将带你了解Java正则表达式的简单应用,并结合两个示例文件`parse_redbend_log`和`eyesaver`进行...

    Java根据正则表达式生成字符串—Xeger,automaton

    使用Xeger的好处在于,生成的字符串不仅满足正则表达式的要求,还具有一定的随机性,这对于测试和代码覆盖率提升非常有用。下面是一个简单的使用Xeger的例子: ```java import org.pcollections.Xeger; public ...

    java课件1-2章25个例题Java语言概述、基本数据类型、运算符与表达式

    在“java课件1-2章25个例题Java语言概述、基本数据类型、运算符与表达式”中,我们将深入探讨Java语言的基础知识,包括语言概述、基本数据类型以及运算符与表达式。 首先,Java语言概述是理解任何编程语言的起点。...

    Java 自动提升的资源

    在Java编程语言中,"自动提升"通常指的是数据类型的隐式转换,这是一个关键概念,尤其在处理不同类型的数据操作时。Java自动提升确保了在不同数据类型之间进行运算或比较时的兼容性和正确性。让我们深入了解一下这个...

    57.055.JAVA基础教程_Java基本语法-自动类型提升运算2(57).rar

    "自动类型提升运算2"是Java编程中的一个重要概念,它涉及到数据类型的转换以及运算过程中如何处理不同类型的数据。 自动类型提升,也称为隐式类型转换,是指在进行算术运算或比较操作时,低精度数据类型会自动转换...

    浅谈Java中正则表达式的优化方法

    Java的正则表达式引擎具备一定的智能性,能够在编译阶段对某些类型的正则表达式进行优化。例如,如果一个正则表达式包含了一个固定的子串,引擎会在输入字符串中预先搜索这个子串。如果未找到匹配,则会立即返回失败...

    Quartz定时器,表达式自动生成工具

    Quartz定时器是一款广泛应用于Java开发中的开源任务调度框架,其功能强大且灵活,能够帮助开发者轻松...通过下载提供的"Quartz定时表达式自动生成.exe"文件,你可以在自己的项目中快速体验这一便捷功能,提升工作效率。

    Java中自动类型转换共3页.pdf.zip

    4. **表达式运算中的转换**:在算术表达式中,如果操作数具有不同的类型,Java会将它们提升到最高类型(通常是double)进行计算,然后根据需要将结果转换回较低类型。 5. **方法参数传递**:当方法参数是基本类型,...

    精通lambda表达式++Java多核编程

    Java 8引入了lambda表达式和流API,为多核编程提供了强大而灵活的工具,使得开发者能更有效地利用现代多核处理器来提升程序的性能。 首先,关于lambda表达式,这是一种简洁的定义接口实例的方式,也称为匿名函数。...

Global site tag (gtag.js) - Google Analytics