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

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是一门强类型语言,不仅每个变量具有指定的数据类型,它的表达式也有指定的数据类型。因此在不同类型之间进行赋值操作很容易遇到...

    02.Java基础语法

    含义:在表达式中,小范围类型的变量会自动提升成大范围运算。 结论:表达式的最终结果数据类型是由表达式在红的最高数据类型决定的,最高数据类型是什么,其结果数据的类型就是什么。 注意: byte short ...

    JAVA上百实例源码以及开源项目

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    JAVA上百实例源码以及开源项目源代码

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    java面试宝典

    由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误。  对于short s1 = 1; s1 += 1;由于 += 是java语言规定的运算符,java编译器会对它进行特殊...

    java开源包4

    Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG(解析表达式语法)分析设施。你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法...

    java开源包101

    Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG(解析表达式语法)分析设施。你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法...

    java开源包11

    Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG(解析表达式语法)分析设施。你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法...

    java开源包6

    Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG(解析表达式语法)分析设施。你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法...

    java开源包9

    Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG(解析表达式语法)分析设施。你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法...

    java开源包8

    Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG(解析表达式语法)分析设施。你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法...

    java开源包5

    Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG(解析表达式语法)分析设施。你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法...

    java开源包10

    Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG(解析表达式语法)分析设施。你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法...

    java开源包1

    Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG(解析表达式语法)分析设施。你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法...

    java开源包3

    Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG(解析表达式语法)分析设施。你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法...

    Java面试宝典(传说中的葵花宝典).doc

    由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误。 对于short s1 = 1; s1 += 1;由于 += 是java语言规定的运算符,java编译器会对它进行特殊...

    疯狂JAVA讲义

    3.5.3 表达式类型的自动提升 56 3.6 直接量 57 3.6.1 直接量的类型 57 3.6.2 直接量的赋值 58 3.7 运算符 58 3.7.1 算术运算符 58 3.7.2 赋值运算符 61 3.7.3 位运算符 62 3.7.4 扩展后的赋值运算符 64 ...

    java开源包2

    Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG(解析表达式语法)分析设施。你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法...

    java开源包7

    Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG(解析表达式语法)分析设施。你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法...

Global site tag (gtag.js) - Google Analytics