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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 熊永标 中级黑马   /  2013-1-7 12:57  /  1431 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. byte a=10;
  2. byte b=10;
  3. byte c=a+b;
  4. //编译会出错,因为a+b的结果将类型默认为int类型,把int类型赋给byte类型,会发生字节丢失.所以编译不通过.
  5. short a=10;
  6. short b=10;
  7. short c=a+b;
  8. //编译会出错,因为a+b的结果将类型默认为int类型,把int类型赋给short类型,会发生字节丢失.所以编译不通过.
  9. char a=10;
  10. char b=10;
  11. char c=a+b;
  12. /*编译会出错,因为a+b的结果将类型默认为int类型,把int类型赋给char类型,会发生字节丢失.所以编译不通过.*/

  13. int a=10;
  14. int b=10;
  15. int c=a+b;
  16. /*编译会通过,因为a+b的结果将类型默认为int类型,把int类型赋给int类型,因为类型相同.所以编译通过.这我理解.但是如下:*/

  17. float f=30.2f;
  18. float f1=30.2f;
  19. float f2=f+f1;
  20. /*也会编译通过,不是说浮点数默为Double吗,那f+f1结果当在内存中时,也是Double,那在赋值给float时,为什么会通过编译呢?*/
复制代码

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

4 个回复

倒序浏览
java中常量 的浮点数字就被认为是double型的,而且不能直接赋给float型的变量。。像float a=1.2; 这样的编绎直接出错。。要写成float a=1.2f; 才行。

评分

参与人数 1技术分 +1 收起 理由
邓艳秋 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 希望的曙光 于 2013-1-7 13:50 编辑

简单数据类型之间的转换
在Java中整型、实型、字符型被视为简单数据类型,这些类型由低级到高级分别为:(byte,short,
char——(int—long—float—double
简单数据类型之间的转换又可以分为:
1、低级到高级的自动类型转换
2、高级到低级的强制类型转换
3、包装类过渡类型能够转换
下面就让我们分别来看看这几种转换:
第一种:自动类型转换
低级变量可以直接转换为高级变量,例如:
byte b;
int i=b;
long l=b;
float f=b;
double d=b;
如果低级类型为char型,向高级类型(如整型转换时,会转换成相应的ASCII码值,例如:
char c =‘c’;
int i = c;
System.out.println(“output:”i;
输出:output:99;
对于boolean类型,是不可以转换为其它的数据类型的,byte,short,char之间是不会相互转化的,它们
三者在计算时首先会转换为int类型,再计算。例如:
short i = 99;
char x = (chari;
System.out.println(“output:”x);
输出:output:c;
第二种:强制类型转换
将高级变量转换成低级变量时,需要使用强制类型转换,格式如下例:
int i = 99;
byte b =(byte)i;
char c = (char)i;
float f =(float)i;
注意:加上强制转换符时:可能会造成精度降低或溢出,使用时特别注意
总结:当有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那一种数据类型,然
后再进行计算
第三种:包装类过渡类型转换

评分

参与人数 1技术分 +1 收起 理由
邓艳秋 + 1

查看全部评分

回复 使用道具 举报
你好
这是java自动类型提升,byte、short、char在算数运算时会自动类型提升为int。
所以得到的结果需要强制类型转换。

评分

参与人数 1技术分 +1 收起 理由
邓艳秋 + 1

查看全部评分

回复 使用道具 举报
所谓的默认是double行 是你没写才是那样的啊
但你看你写的是
float f=30.2f;    你每行后面都有f啊  这就是在告诉虚拟机这个是一个float类型的  然后你两个float只要不超出范围 那他们相加就是float类型的
float f1=30.2f;
float f2=f+f1;   两个float类型相加赋值给float没问题哦

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马