CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

[100分]为什么在java中如此简单的程序、、、、 byte a=1;byte b=1;short c=a+b; 、、、会报出如下错误!!?

楼主zhangsq(中zhangsq)2005-11-28 11:36:44 在 Java / J2SE / 基础类 提问

......  
    byte   a=1;  
    byte   b=1;  
    short   c=a+b;  
    ........  
  "App.java":   possible   loss   of   precision;found       :   int,required:   short   at   line   5,   column   18  
  问题点数:100、回复次数:22Top

1 楼zhangsq(中zhangsq)回复于 2005-11-28 11:37:03 得分 0

upTop

2 楼zhangsq(中zhangsq)回复于 2005-11-28 11:37:11 得分 0

upTop

3 楼skycncomp(闭关修练到年底)回复于 2005-11-28 11:40:28 得分 1

楼主想想byte   +   byte   =什么类型了???Top

4 楼ypdarling(冲动是魔鬼!)回复于 2005-11-28 11:56:13 得分 2

这样就正确了,    
  byte   a=1;  
    byte   b=1;  
    short   c=(short)a+b;  
   
  两个byte相加的结果是一个int,不能赋给short,必须进行强制类型转换。Top

5 楼OnlyFor_love(『勾勾手指头 一辈子不分手』)回复于 2005-11-28 12:16:49 得分 1

原因很简单,是因为你对java的基本数据类型了解的不够。  
  不象是php,定义的变量的类型会随着赋给它的值的变化而变化。Top

6 楼oak_2005(yutianlu2005)回复于 2005-11-28 12:55:00 得分 2

upTop

7 楼yanxiazhiqiu(if the words don't come my way...)回复于 2005-11-28 12:56:17 得分 0

蹭分蹭分!!Top

8 楼treeroot(旗鲁特)回复于 2005-11-28 13:02:19 得分 2

short   c=(short)(a+b);  
   
  Top

9 楼sxbcsdn(石破)回复于 2005-11-28 13:06:02 得分 2

"App.java":   possible   loss   of   precision;found       :   int,required:   short   at   line   5,   column   18  
   
  两个数进行操作的时候,得到的结果在JAVA中默认是int型的  
  如果要赋给一个short的,就必须进行强制转换。Top

10 楼xicheng_my_love()回复于 2005-11-28 13:07:21 得分 10

看一下java编程思想   什么都明白了    
  其中一条叫promotion  
  就是两个byte相加,在计算之前会把byte先转化为int,结果为int,左边为short,java中要求显示cast  
  Top

11 楼zhkchi(火焰神)回复于 2005-11-28 13:08:23 得分 2

强类型语言Top

12 楼ypdarling(冲动是魔鬼!)回复于 2005-11-28 13:09:22 得分 5

呵呵     我少写了一括号  
  应该是  
  byte   a=1;  
    byte   b=1;  
    short   c=(short)(a+b);Top

13 楼vvpang(NullPointerException)回复于 2005-11-28 13:16:57 得分 2

要显示的类型转换Top

14 楼oak_2005(yutianlu2005)回复于 2005-11-28 13:27:49 得分 50

首先,java是强类型语言,当两种类型彼此不兼容时要进行类型转换,如  
              byte   a=1;  
              byte   b=1;  
              short   c=(short)(a+b);  
              a+b后的结果将自动提升为int型,要把它赋值给short型   的变量c就要进行类型转换  
              short   c=(short)(a+b);。其中(a+b)前的(short)是要转化为的数据类型  
   
  关于类型的自动提升,java定义若干适用于表达式的类型提升规则:  
   
      第一,所有的byte型、short型和char型的值将被提升到int型;  
      第二,如果一个操作数是long型,计算结果就是long型;  
      第三,如果一个操作数是float型,计算结果就是float型;  
      第四,如果一个操作数是double型,计算结果就是double型。  
  Top

15 楼niko7(掠水无痕)回复于 2005-11-28 13:34:47 得分 5

楼上讲的很清楚,不错!支持Top

16 楼nationally(自由鸟)回复于 2005-11-28 13:43:10 得分 2

对,支持。Top

17 楼treeroot(旗鲁特)回复于 2005-11-28 13:54:18 得分 5

第三,如果一个操作数是float型,计算结果就是float型;  
   
  这条对吗??Top

18 楼treeroot(旗鲁特)回复于 2005-11-28 14:34:45 得分 5

是对的Top

19 楼shouyenet1(yyhw)回复于 2005-11-28 14:41:32 得分 2

确实应该注意Top

20 楼sunqihui(太阳鸟)回复于 2005-11-28 14:46:16 得分 2

哈哈,SCJP上有这样的题...Top

21 楼laou2008(濯宇)回复于 2005-11-28 14:59:31 得分 0

基本数据类型:两个数相加,至少是INT类型,或许这样说有点语法问题Top

22 楼gaoxueting1984(鸭片儿鱼)回复于 2005-11-29 22:44:18 得分 0

蹭分蹭分!!Top

相关问题

  • C/S OR B/S
  • b/s,c/s
  • C\S ====> B\S
  • C/S------------->B/S
  • 请教!c/s -> b/s
  • 请教!c/s -> b/s
  • AB=AC->B=C?
  • typedef VOID (*A)(B *C);
  • C/S VS B/S??
  • float a,b,c;(a+b)+c==(b+a)+c和(a+b)+c==(a+c)+b有什么区别?

关键词

  • 转换
  • 数据
  • a+b
  • 类型
  • short
  • 操作数
  • byte
  • 计算结果就是
  • 提升
  • 赋给

得分解答快速导航

  • 帖主:zhangsq
  • skycncomp
  • ypdarling
  • OnlyFor_love
  • oak_2005
  • treeroot
  • sxbcsdn
  • xicheng_my_love
  • zhkchi
  • ypdarling
  • vvpang
  • oak_2005
  • niko7
  • nationally
  • treeroot
  • treeroot
  • shouyenet1
  • sunqihui

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo