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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 杜光 于 2013-8-4 10:04 编辑

我知道在不同数据类型之间进行数据运算时,会自动隐式的向高精度类型转换,比如short+int结果会自动转换为int型,但为什么同种类型的变量相加也会自动类型转换呢?比如byte+byte型竟然也会自动转换为int型,我想问一下类似这种情况还有哪些?回答的时候只回答同种类型相加还会自动类型转换的情况,谢谢各位了!{:soso_e176:}

评分

参与人数 1技术分 +1 收起 理由
杜光 + 1

查看全部评分

4 个回复

倒序浏览
数据类型根据占用存储空间的大小分为高低不同的级别,占用空间小的级别低,占用空间大的级别高,隐式类型转换(又称自动类型转换)遵循由低级到高级转换的规则。当满足以下条件是会发生自动转换:
1.转换前的数据类型与转换后的数据类型兼容。如:short 和int 因为两者都是整形。
2.转换后的数据类型的表示范围比转换前的类型大。如:int的数据表示范围比short大。例如:
  1. byte b=0;
  2. byte b1 = 3;
  3. byte b2 = 4;
  4. b=b1+b2;
  5. System.out.println(b);
复制代码
b1,b2是变量,数值是变化的,系统无法判断变量值是否在byte(-128~127)范围内
出现以下问题


无论是short+short类型数据还是byte+short类型数据等等.... 只要满足转换前的数据类型与转换后的数据类型兼容,转换后的数据类型的表示范围比转换前的类型大,就会自动转型。

还有以下几种情况包含自动转型
  1. //编译通过。等价于byte = 2;因为右边是常量,其值固定,若在byte型的范围内,编译器会自动完成强制转换;若不在范围内,则编译失败。
  2. byte b = 1 + 1;


  3. //编译通过。+=是一个赋值运算符,加和赋值是一步完成的,含有强制类型转换。等价于b = b = (byte)(b+1);
  4. byte b = 1;
  5. b = b += 1;

  6. //编译通过。++是自增运算符→自身加1再赋值给自己,加1和赋值也是一步完成的,且不会改变变量的类型(含有强制类型转换)。
  7. byte b = 1;
  8. b = ++b;
复制代码
希望与楼主共同学习


评分

参与人数 1技术分 +1 收起 理由
杜光 + 1

查看全部评分

回复 使用道具 举报
byte+byte可以转换成int型吗?
字节在电脑里是有对应的码表的。
比如A对应的是65,B对应的66。那么A和B两个相加的话,就是65+66=131了。
回复 使用道具 举报
胡智 发表于 2013-8-3 23:09
byte+byte可以转换成int型吗?
字节在电脑里是有对应的码表的。
比如A对应的是65,B对应的66。那么A和B两个 ...

byte+byte会自动转换为int,具体情况请看2楼的代码!
回复 使用道具 举报
黑马李昂 发表于 2013-8-3 22:57
数据类型根据占用存储空间的大小分为高低不同的级别,占用空间小的级别低,占用空间大的级别高,隐式类型转 ...

谢谢你的答案,终于又明白了点!:)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马