黑马程序员技术交流社区
标题:
基本数据类引引发的问题迷惑
[打印本页]
作者:
熊永标
时间:
2013-1-7 12:57
标题:
基本数据类引引发的问题迷惑
byte a=10;
byte b=10;
byte c=a+b;
//编译会出错,因为a+b的结果将类型默认为int类型,把int类型赋给byte类型,会发生字节丢失.所以编译不通过.
short a=10;
short b=10;
short c=a+b;
//编译会出错,因为a+b的结果将类型默认为int类型,把int类型赋给short类型,会发生字节丢失.所以编译不通过.
char a=10;
char b=10;
char c=a+b;
/*编译会出错,因为a+b的结果将类型默认为int类型,把int类型赋给char类型,会发生字节丢失.所以编译不通过.*/
int a=10;
int b=10;
int c=a+b;
/*编译会通过,因为a+b的结果将类型默认为int类型,把int类型赋给int类型,因为类型相同.所以编译通过.这我理解.但是如下:*/
float f=30.2f;
float f1=30.2f;
float f2=f+f1;
/*也会编译通过,不是说浮点数默为Double吗,那f+f1结果当在内存中时,也是Double,那在赋值给float时,为什么会通过编译呢?*/
复制代码
作者:
王少雷
时间:
2013-1-7 13:10
java中常量 的浮点数字就被认为是double型的,而且不能直接赋给float型的变量。。像float a=1.2; 这样的编绎直接出错。。要写成float a=1.2f; 才行。
作者:
何竹冬
时间:
2013-1-7 13:55
你好
这是java自动类型提升,byte、short、char在算数运算时会自动类型提升为int。
所以得到的结果需要强制类型转换。
作者:
张森
时间:
2013-1-7 17:57
所谓的默认是double行 是你没写才是那样的啊
但你看你写的是
float f=30.2f; 你每行后面都有f啊 这就是在告诉虚拟机这个是一个float类型的 然后你两个float只要不超出范围 那他们相加就是float类型的
float f1=30.2f;
float f2=f+f1; 两个float类型相加赋值给float没问题哦
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2