A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郭利超 高级黑马   /  2013-3-25 09:55  /  1705 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 郭利超 于 2013-3-25 11:56 编辑

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

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

未命名.jpg

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

2 个回复

倒序浏览
类型转换
类型转换方向(存储空间较小的数据可以转换到存储间大的,反之不行)
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:55
回复 使用道具 举报
//声明变量
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);

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

点评

很详细 ! 慢慢看懂了 TKS  发表于 2013-3-25 11:55
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马