Java中数值的默认类型问题···

棒棒不是糖_ 2014-01-18 01:01:41
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的,为什么不报错?
...全文
365 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Hanshaw 2016-08-18
  • 打赏
  • 举报
回复
你这里涉及的问题很多,有字面量的处理,运算时的整型提升。同时还要注意java种bool型不会参加转换,
慢慢地转变 2014-01-18
  • 打赏
  • 举报
回复
引用 5 楼 lqs365 的回复:
[quote=引用 4 楼 lcf 的回复:] [quote=引用 3 楼 lqs365 的回复:] [quote=引用 1 楼 u012099141 的回复:] 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个字节, 为什么这不报错?[/quote] 因为编译器会对赋值操作做一些令人混淆的事情。。。12是一个常量,在byte的范围之内,于是就合法了。你写成1200就报错了 [/quote] 我觉得不是这个范围的问题吧,如果是范围的话,那么float b=12.32 ; 12.32也是在float的范围。[/quote] 刚刚测试过:在对应类型的范围内,大转下不需要强制转换,如果超出范围需要强制转换也能编译,对于LZ提出的质疑,int 4个字节到byte2个字节,编译器具体怎么做到的,我也不清楚了
棒棒不是糖_ 2014-01-18
  • 打赏
  • 举报
回复
引用 4 楼 lcf 的回复:
[quote=引用 3 楼 lqs365 的回复:] [quote=引用 1 楼 u012099141 的回复:] 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个字节, 为什么这不报错?[/quote] 因为编译器会对赋值操作做一些令人混淆的事情。。。12是一个常量,在byte的范围之内,于是就合法了。你写成1200就报错了 [/quote] 我觉得不是这个范围的问题吧,如果是范围的话,那么float b=12.32 ; 12.32也是在float的范围。
lcf 2014-01-18
  • 打赏
  • 举报
回复
引用 3 楼 lqs365 的回复:
[quote=引用 1 楼 u012099141 的回复:] 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个字节, 为什么这不报错?[/quote] 因为编译器会对赋值操作做一些令人混淆的事情。。。12是一个常量,在byte的范围之内,于是就合法了。你写成1200就报错了
棒棒不是糖_ 2014-01-18
  • 打赏
  • 举报
回复
引用 1 楼 u012099141 的回复:
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个字节, 为什么这不报错?
慢慢地转变 2014-01-18
  • 打赏
  • 举报
回复
还有一个转换向上(大类型)需强制转换,向下(小类型,如int- >byte)就会自动转换。
慢慢地转变 2014-01-18
  • 打赏
  • 举报
回复
12是int类型,但是java里面能进行默认的转换。 如 byte b = 12;(能编译) 你写成 int a = b + 5;就会编译出错,2边类型不同。 12.32 是double,但是java里默认的许可是double。当你申明float类型时,要写成12.32f。你申明double类型的时候,就不用写成 12.32d也是正确的。 可能表述不是很清楚,供参考

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧