java 类型提升的约定
2007-01-19 15:56
183 查看
类型提升的约定
除了将byt型和short型提升到int型以外,java定义了若干适用于表达式的类型提升规则
(type promotion rules). 首先,如刚才描述的,所有的byte型和short型的值被提升到int型.
其次,如果一个操作数是long型,整个表达式将被提升到long型;如果一个操作数是float型,
整个表达式将被提升到float型;如果有一个操作数是double型,计算结果就是double型.
下面的程序表明:在表达式中的每个值是如何被提升以匹配各自二进制运算符的第二个参数:
class Promote {
public static void main(String[] args) {
byte b = 42;
char c = 'a';
short s = 1024;
int i = 50000;
float f = 5.67f;
double d = .1234;
double result = (f * b) + (i / c) - (d * s);
System.out.println((f * b) + "+" + (i / c) + " - " + (d * s));
System.out.println("result =" + result);
}
}
进一步看看发生在下列程序行的类型提升:
double result = (f * b) + (i / c) - (d * s);
在第一个表达式f*b中,变量b被提升为float类型,该子表达式的结果当然是float类型.
接下来,在子表达式i/c中,边量c被提升为int类型,该子表达式的结果当然是int类型.
然后,子表达式d*s中的变量s被提升为double类型,该子表达式的结果当然是double类型.
最后,考虑三个中间值,float类型,int类型,和double类型.float类型加int类型的结果是
float类型,然后float类型减去提升为double类型的double类型,该表达式的最后结果是
double类型.
除了将byt型和short型提升到int型以外,java定义了若干适用于表达式的类型提升规则
(type promotion rules). 首先,如刚才描述的,所有的byte型和short型的值被提升到int型.
其次,如果一个操作数是long型,整个表达式将被提升到long型;如果一个操作数是float型,
整个表达式将被提升到float型;如果有一个操作数是double型,计算结果就是double型.
下面的程序表明:在表达式中的每个值是如何被提升以匹配各自二进制运算符的第二个参数:
class Promote {
public static void main(String[] args) {
byte b = 42;
char c = 'a';
short s = 1024;
int i = 50000;
float f = 5.67f;
double d = .1234;
double result = (f * b) + (i / c) - (d * s);
System.out.println((f * b) + "+" + (i / c) + " - " + (d * s));
System.out.println("result =" + result);
}
}
进一步看看发生在下列程序行的类型提升:
double result = (f * b) + (i / c) - (d * s);
在第一个表达式f*b中,变量b被提升为float类型,该子表达式的结果当然是float类型.
接下来,在子表达式i/c中,边量c被提升为int类型,该子表达式的结果当然是int类型.
然后,子表达式d*s中的变量s被提升为double类型,该子表达式的结果当然是double类型.
最后,考虑三个中间值,float类型,int类型,和double类型.float类型加int类型的结果是
float类型,然后float类型减去提升为double类型的double类型,该表达式的最后结果是
double类型.
相关文章推荐
- java 类型提升的约定
- Java表达式的数据类型自动提升问题
- OpenJDK源码研究笔记(五)-缓存Integer等类型的频繁使用的数据和对象,大幅度提升性能(一道经典的Java笔试题)
- java表达式类型的自动提升
- 牛客网Java刷题知识点之表达式类型的自动提升
- java表达式类型的自动提升
- Java面试之类型提升
- java表达式中类型的自动提升
- OpenJDK源码研究笔记(五)-缓存Integer等类型的频繁使用的数据和对象,大幅度提升性能(一道经典的Java笔试题)
- Java数值类型提升机制
- Java表达式类型自动提升
- Java入门:java中不同类型的转换和提升
- Java三元运算符类型提升
- java 类型自动提升
- Java对于表达式中的自动类型提升
- JAVA中的自动类型提升
- Java中不同类型的转换和提升
- Java中的类型提升与转换
- java数据类型的自动提升
- java基础_String类型和char类型、自动类型提升和强制类型转换