Java表达式转型规则详解

先上一道题:java

想要正确解答这道题,须要知道Java表达式转型规则:

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

 

结合实例详细讲解Java表达式转型规则:字符串

一、操做数中有double、float、long的时候,按照最高的类型进行转换class

double a = 1.0;
int b = 3;

那么 a+b 为double型
二、若是没有这几种,则byte、char、short都转化为int变量

byte a = 1;
byte b = -2;

那么 a+b 为int型
三、final修饰的变量不会转换类型,可是进行操做的时候,操做结果依据左操做数的类型进行转换数据类型

byte a = 1;
final byte b = 2;

那么 a+b 为int型(虽然b不会改变类型,依据左边的a的类型而定结果类型,可是a会自动提高为int型)float

四、表达式类型自动提高的正确示例代码im

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);

五、若是表达式中包含了字符串,则又是另外一番情形了:由于把加号(+)放在字符串和基本类型值之间时,这个加号是一个字符串链接运算符,而不是进行加法运算。看以下代码:d3

//输出字符串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!。数据

 

答案解析:本题答案应为:B、C、D

语句1错误:b3=(b1+b2);自动转为int,因此正确写法为b3=(byte)(b1+b2);或者将b3定义为int;语句2正确:b6=b4+b5;b四、b5为final类型,不会自动提高,因此和的类型视左边变量类型而定,即b6能够是任意数值类型;语句3错误:b8=(b1+b4);虽然b4不会自动提高,但b1仍会自动提高,因此结果须要强转,b8=(byte)(b1+b4);语句4错误:b7=(b2+b5); 同上。同时注意b7是final修饰,即只可赋值一次,便不可再改变

相关文章
相关标签/搜索