黑马程序员技术交流社区

标题: 关于自动类型提升的过程 [打印本页]

作者: 郭利超    时间: 2013-3-25 09:55
标题: 关于自动类型提升的过程
本帖最后由 郭利超 于 2013-3-25 11:56 编辑

如图片所示  请大神帮忙详述类型提升的过程  和最后输出结果  代码是从就业培训教程上面截取出来的!
懵懂懵懂啊!  
这个代码给我转晕了 求大神指点迷经!

未命名.jpg (47.55 KB, 下载次数: 6)

未命名.jpg

作者: 罗平    时间: 2013-3-25 11:25
类型转换
类型转换方向(存储空间较小的数据可以转换到存储间大的,反之不行)
Int I = 10;
Long l = I;//不丢精度。
Int b = 10;
Byte c = b;//错误,大转小
强制类型转换(大的转成小的,产生精度丢失的问题)
Int b = 10;
Byte c = (byte)b;//丢失精度。
自动类型提升(多种类型变量运算结果可能造成结果类型提升,编译强制提升类型)
Byte b =10;
Byte c =20;
Byte d = b+c//错误,int d
Byte d = (byte)b+c;
自动类型提升结论
AB其中有double, 运算结果为double
AB其中有float, 运算结果为float.
AB 其中有Long ,运算结果为long
其余情况为int.

其中你得知道byte short char int float double 的级别,而且要知道每种各自占多少位或字节 就是占用空间较小的和占用空间较大的
进行运算时,运算结果是占用空间较大那个类型。
结果:
283.5+515-126.3616
result=672.1384
第一个283.5是50*5.67 50虽然是byte,但是float比byte优先级高转为float。
515=5000*97取整 得到的,97是a的ASCII码。
126.3616=1024*0.1234得到  .1234就是0.1234
672.1384就是前面那个式子283.5+515-126.3616的结果。



作者: 芦子骐    时间: 2013-3-25 11:43
//声明变量
Byte b = 50;
char c = "a";
short s = 1024
int i = 50000;
float f =  5.67f;
double d = .1234
   //(f*b) =>Byte 向 float转 = float类型  
   //+( i/c)=>char 向int 转 = int 类型
   //-(d*s)=>short向double转 = double类型
double result = (f.b)+(i/c)-(d.s);
   // 输出结果: 283.5 +  515(a在做运算的时候转换成ASCII值) - 126.3616
System.out.println((f.b)+(i/c)-(d.s));
   //在输出result的时候,会把所有的类型都转成double类型   结果为:674.1384
System.out.println("result = "+result);

  总之,就你记住一句话就噢了!~~两个不同类型的值做运算,小的自动向上转型。
                                                小的能给大的赋值,而大的给小的赋值就会出现精度缺失。(大小是指数据类型)




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2