Java对于表达式中的自动类型提升
2016-05-12 07:44
417 查看
1.表达式中的自动类型提升:
表达式求值时,Java自动的隐含的将每个byte、short或char操作数提升为int类型,这些类型的包装类型也是可以的。
例如:short s1 = 1;
s1 = s1 + 1;
s1+1运算中的操作数s1会被自动提升为int类型,s1+1运算结果会成为int类型,再赋值给short类型的s1时,编译器会报告需要强制转换类型的错误。需要改为short
s1=1; s1=(short)(s1+1);结果就是short类型。
例如:short s1 = 1;
s1 += 1;
+=是java语言中的运算符,Java编译器会对它特殊处理进行正确的编译。
2.类型提升规则:
byte、short和char类型的值都被提升为int类型;
如果有一个操作数是long类型,就将整个表达式提升为long类型;
如果有一个操作数是float类型,就将整个表达式提升为float类型;
如果任何一个操作数为double类型,结果将为double类型。
例如:
byte b=1;
char c='a';
short s=1024;
int i=50;
float f=2.0f;
double d=.123;
double result = (f * b) + (i / c) - (d * s);
f*b中,b被自动提升为float类型,该表达式结果是float类型;
i/c中,c被自动提升为int类型,该表达式结果是int类型;
d*s中,s被自动提升为doubl类型,该表达式结果是double类型;
最后,float+int-double,结果会被提升为double类型,double类型为最后结果result的类型。
表达式求值时,Java自动的隐含的将每个byte、short或char操作数提升为int类型,这些类型的包装类型也是可以的。
例如:short s1 = 1;
s1 = s1 + 1;
s1+1运算中的操作数s1会被自动提升为int类型,s1+1运算结果会成为int类型,再赋值给short类型的s1时,编译器会报告需要强制转换类型的错误。需要改为short
s1=1; s1=(short)(s1+1);结果就是short类型。
例如:short s1 = 1;
s1 += 1;
+=是java语言中的运算符,Java编译器会对它特殊处理进行正确的编译。
2.类型提升规则:
byte、short和char类型的值都被提升为int类型;
如果有一个操作数是long类型,就将整个表达式提升为long类型;
如果有一个操作数是float类型,就将整个表达式提升为float类型;
如果任何一个操作数为double类型,结果将为double类型。
例如:
byte b=1;
char c='a';
short s=1024;
int i=50;
float f=2.0f;
double d=.123;
double result = (f * b) + (i / c) - (d * s);
f*b中,b被自动提升为float类型,该表达式结果是float类型;
i/c中,c被自动提升为int类型,该表达式结果是int类型;
d*s中,s被自动提升为doubl类型,该表达式结果是double类型;
最后,float+int-double,结果会被提升为double类型,double类型为最后结果result的类型。
相关文章推荐
- Java设计模式(九) 桥接模式
- java基础第二天课程总结
- 我学过的java3
- java .class
- (java)从零开始之-反射Reflect
- JAVA设计模式
- 框架知识(1)--SpringMVC
- java Socket readLine() 阻塞
- SpringMVC基础知识汇总
- spring源码剖析(七)JdbcTemplate数据库封装原理解读
- struts2(十一)运行流程
- Quartz使用-入门使用(java定时任务实现)
- java基础第六天_接口与适配器模式、多态、内部类
- java基础第六天_接口与适配器模式、多态、内部类
- java中有那些关键字?
- [Java] 基础命令
- java运算符中值的注意的地方
- JAVA回调机制(CallBack)详解
- 详解java定时任务
- Eclipse快捷键