日期:2014-05-20  浏览次数:20607 次

Java中数值的默认类型问题···
byte a=12;
12默认是int型 为什么这不报错?

float b=12.32
12.32默认是double 型 所以报错

俺是新手 忘达人指教~自动转型是从低到高的啊
byte->short->int->long->float->double
char->int->long->float->double
默认是int 怎么转化为byte的,为什么不报错?

------解决方案--------------------
12是int类型,但是java里面能进行默认的转换。
如 byte  b = 12;(能编译)
你写成 int a = b + 5;就会编译出错,2边类型不同。
12.32 是double,但是java里默认的许可是double。当你申明float类型时,要写成12.32f。你申明double类型的时候,就不用写成 12.32d也是正确的。
   
可能表述不是很清楚,供参考
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

12是int类型,但是java里面能进行默认的转换。
如 byte  b = 12;(能编译)
你写成 int a = b + 5;就会编译出错,2边类型不同。
12.32 是double,但是java里默认的许可是double。当你申明float类型时,要写成12.32f。你申明double类型的时候,就不用写成 12.32d也是正确的。
   
可能表述不是很清楚,供参考


我的问题正是,byte a=12;
12默认是int型(3个字节),byte是2个字节, 为什么这不报错?


因为编译器会对赋值操作做一些令人混淆的事情。。。12是一个常量,在byte的范围之内,于是就合法了。你写成1200就报错了


我觉得不是这个范围的问题吧,如果是范围的话,那么float b=12.32 ;
12.32也是在float的范围。

刚刚测试过:在对应类型的范围内,大转下不需要强制转换,如果超出范围需要强制转换也能编译,对于LZ提出的质疑,int 4个字节到byte2个字节,编译器具体怎么做到的,我也不清楚了