关于基本类型的问题!!急

MaoZhua 2004-08-01 08:56:20
请高手先看看下边的这个程序!
public class ByteAndInt{
public static void main(String[] args){
byte a=126;
byte b=127;
byte c;
c=a+b;
System.out.println(c);
}
}
这个程序不能通过编译!输出结果是:
--------------------Configuration: SCJP - j2sdk1.4.0 <Default>--------------------
D:\MaoJava\SCJP\ByteAndInt.java:10: possible loss of precision
found : int
required: byte
c=a+b;
^
1 error
小弟想不能通过编译的原因是:byte类型+byte类型的都自动转换成int类型的!但小弟试着编译下边的程序:
public class ByteAndInt{
public static void main(String[] args){
int a=2147483647;//2的31次方-1
int b=2147483646;//2的31次方-2
int c;
c=a+b;
System.out.println(c);
}
}
这个程序能够通过编译。这可就使小弟迷惑了!为什么同样的道理这个却可以通过!!
请高手指点一二!
小弟先谢了!



...全文
137 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
MaoZhua 2004-08-04
  • 打赏
  • 举报
回复
大家,对于你们的回答。在下非常感谢!
但本人的密码丢失了!想给分都没办法!
artoksxb 2004-08-03
  • 打赏
  • 举报
回复
short,char,int相互转换
shine333 2004-08-02
  • 打赏
  • 举报
回复
〉a+b结果为int,编译器编译时能够发现将结果赋给表数范围小的byte,所以需强制转换为,c=(byte)(a+b);

这个和a+b到底等于多少是没有关系的,所有的整形,除了long例如byte, short, char, int等互相之间相加(byte + char, short + short, char + int ...),结果无论是多少,一律作为int型

第二点关于计算结果,当超出的时候,就好像当足球比赛打出篮球比赛的分数时可能发生的事情一样,最高位升为1,但是由于最高位不是用来计数的,而是用来表示符号的,所以变成了负数
tan_jianhui 2004-08-02
  • 打赏
  • 举报
回复
实际写程序中,不是可以避免这种问题吗?
为什么非要钻牛角尖不可?
draco2002 2004-08-02
  • 打赏
  • 举报
回复
唉,又是类型转换的问题!!
52juanjuan 2004-08-02
  • 打赏
  • 举报
回复
第一个是需要进行类型转换从int 转成btye只有通过显式转换来进行.
第二个就是出现的溢出问题了这些问题可以查看一下thinking in java这本书这本书真的不错.
xj2001air 2004-08-02
  • 打赏
  • 举报
回复
好问题!
superryu 2004-08-02
  • 打赏
  • 举报
回复
需要类型转换
vongood 2004-08-02
  • 打赏
  • 举报
回复
byte + char, short + short, char + int ...都为int
string + byte/short /int 都为string
D_O_N_G 2004-08-01
  • 打赏
  • 举报
回复
up
ntzls 2004-08-01
  • 打赏
  • 举报
回复
1、a+b结果为int,编译器编译时能够发现将结果赋给表数范围小的byte,所以需强制转换为,c=(byte)(a+b);

2、int最大值赋为2147483647,此段a+b结果类型与c匹配,固而编译没问题,c=a+b的结果是程序运行时计算的,超出表数范围的进位被舍去,所以结果又回到了-3,编译器不会去计算某个二元表达式是否会产生溢出。

62,614

社区成员

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

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