黑马程序员_java数据类型---------------------- <a href="http://edu.csdn.net/heima" target="blank">android培训</a>、<a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! ----------------------
表达式类型的自动提升
当一个算术表达式中包含多个基本数据类型的值时,整个算术表达式的数据类型将发生自动提升。Java定义如下的自动提升规则:
所有byte型,short型和char型将被提升到int型。
整个算术表达式的数据类型自动提升到与表达式中最高等级操作数同样的类型。操作数的等级排列如下图,位于箭头右边的等级高于位于剪头左边类型的等级。
//定义一个short类型变量
Short sValue=5;
sValue =sVlue-2;
上面的sValue-2表达式的类型将被提升到int类型了,这样就把右边的int型值赋给左边的short型变量,从而引起错误。
byte b=40;
char c='a';
int i=23;
double d=.314;
double result =b+c+i*d;
System.out.println(result);
必须指出,表达式的类型将严格保持和表达式中最高等级操作数相同类型,相面代码中两个int整数进行除法运算,即使无法除尽,也将得到一个int结果
int val =3;
Int intResult=23/val;
System.out.println(intResult);
从上面程序中可以看出,当两个整数惊醒除法运算时,如果不能整除,得到结果将是把小数部分截断取整后的整数。
如果表达式中包含了字符串,则又是另一情形了:因为把加号放在字符串和基本类型值之间时,这个加号是一个字符串连接运算符,而不是进行加法运算,
System.out.println("Hello!"+'a'+7);
System.out.println('a'+7+"Hello!");
对于第一个表达式"Hello!"+'a'+7,先进行“Hello!”+'a'的运算符,将把'a'转换成字符串,将拼接成字符串Hello!a,接着进行''Hello!a"+'a'+7的运算,这也是一个字符串连接运算,得到结果是Hello!a7.对于第二个表达式,先进行'a'+7加法运算,其中'a'自动提升到int型,变成a对应的ASCII值:97从97+7将得到104,然后进行104+"Hello",104会自动转换成字符串,将变成两个字符串的连接运算,从而得到104Hello!.---------------------- <a href="http://edu.csdn.net/heima" target="blank">android培训</a>、<a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! ----------------------