JAVA 数据类型间转换 字面整型常量赋值给(范围内) short byte char

zmhisgod929 2017-01-10 05:33:11

public class java_01 {

public static void main(String[] args) {
// TODO Auto-generated method stub
byte b1 = 127, b2 = 126;--------------1
byte d = 1;---------------------------------2

byte c = b1 - b2 ;-------------------------3
}

}

情况:第三行编译器报错了需要改成 byte c =(byte) b1 - b2
问题:3 和2 的不同是什么,为啥3报错?


谢谢大家抽空帮忙看问题。
...全文
258 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
IT萌妹子 2019-04-16
  • 打赏
  • 举报
回复
因为第二行的1是常量 int常量是能随意赋值给整形变量的,范围不能超 int i = 10; char c = i; 会报错, 你给i加个final就行了
final int i = 10; char c = i; 你试试看
鱿鱼ing 2017-01-10
  • 打赏
  • 举报
回复
引用 4 楼 zmhisgod929 的回复:
[quote=引用 1 楼 qq_30831935 的回复:] b1 - b2 返回int 转换到byte需要强转
问:表数容量大的转到 容量小的 都要强制转换对吧。 随意3 需要 强制转换。 用这条规则去看2 他是把一个整型 赋值给了 byte 为啥编译器不报错呢。。。。 [/quote] http://images.cnitblog.com/i/426802/201404/292112153618743.png 在Java中,整数类型(byte/short/int/long)中,对于未声明数据类型的整形,其默认类型为int型 2那一行的 1 被声明为byte 了 不是 默认int 型
zmhisgod929 2017-01-10
  • 打赏
  • 举报
回复
你好,是这样的。Java中整数默认是int是正确的。这里 char c = 10; // ok byte b = 10; // ok short s = 10; // ok int i = 10; // ok 正确的原因倒不是因为整数不整数,是因为10在编译阶段就是确定的,编译器可以对它进行范围检查,所以如果char c = 300就会编译阶段报错。 如果这样: int i = 10; char c = i; 虽然范围也是正确的,但是编译器会报错。 ----------------------------转自 cumtwyc 的回答。。 等我学深刻些再回过头来看为什么把。。。。。。谢谢大家
zmhisgod929 2017-01-10
  • 打赏
  • 举报
回复
引用 1 楼 qq_30831935 的回复:
b1 - b2 返回int 转换到byte需要强转
问:表数容量大的转到 容量小的 都要强制转换对吧。 随意3 需要 强制转换。 用这条规则去看2 他是把一个整型 赋值给了 byte 为啥编译器不报错呢。。。。
zmhisgod929 2017-01-10
  • 打赏
  • 举报
回复
引用 1 楼 qq_30831935 的回复:
b1 - b2 返回int 转换到byte需要强转
为啥 byte d = 1 OK 呢? 把一个整型 直接赋值给 byte可以呢?
gzcitizeny 2017-01-10
  • 打赏
  • 举报
回复
楼上的正解。
鱿鱼ing 2017-01-10
  • 打赏
  • 举报
回复
b1 - b2 返回int 转换到byte需要强转

62,628

社区成员

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

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