Java对于表达式中的自动类型提升

来源:互联网 发布:mysql 截断字符串 编辑:程序博客网 时间:2024/06/07 16:00

需要注意的Java基础整形类型   

   Java整数默认是int类型,例如:byte a = 56;(系统会将56赋值给一个byte变量),long bigValue = 9999999999999999;(这个时候系统不会赋值给long变量,而是赋值给了int变量,因为存放不下而报错), 只能这样存放long bigValue = 999999999999999L;
  Java语言使用的Unicode字符集作为编码方式,Java的一个char字符变量是一个16位无符号的整数,与C语言中的Char占8位有区别。
  Java语言浮点型默认是double类型,如果希望把一个浮点型值当成float类型处理,应该这样写float f = 5.12f;
  Java语言还提供了3个特殊的浮点数值:正无穷大(POSITIVE_INFINITY)、负无空大(NEGATIVE_INFINITY)、非数(NaN);一个正数除以0将得到正无穷大,一个负数除以0将得到负无穷大,0.0除以0.0或对一个负数开方将得到一个非数。


  

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的类型。

  
0 0