A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 姚立明 初级黑马   /  2012-2-17 11:22  /  1828 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我定义了如下的类:
class  Test
{
        public static void main(String[] args)
        {
                short a,b,c;
                a=1;
                b=2;
                c=a+b;
                System.out.println(c);
        }
}


a,b,c均是short型,怎么会有如下的编译错误呢?

Test.java:8: 错误: 可能损失精度
                c=a+b;
                   ^
  需要: short
  找到:    int
1 个错误

评分

参与人数 1技术分 +1 收起 理由
唐秀启 + 1

查看全部评分

9 个回复

倒序浏览
java默认输入的数字是int类型,将会进行int类型的计算。
因此你在运算完的时候可以强转:
a=1;
b=2;
c=(short)(a+b);
由于long型容量比int还要大,所以给long型变量赋值的时候,java给了一种可以指定类型的赋值,可以写成如下:
long a,b,c;
a=1L;
b=2L
c=a+b;
或者
long a,b,c;
a=1;
b=2;
c=(long)(a+b);

评分

参与人数 1技术分 +1 收起 理由
唐秀启 + 1

查看全部评分

回复 使用道具 举报
我知道a,b既然是short型,再做c=a+b时为什么还要进行强制类型转换
回复 使用道具 举报
Java中涉及byte、short和char类型的运算操作,首先会把这些值转换为int类型,然后对int类型值进行运算,最后得到int类型的结果。因此,如果把两个short类型值相加,最后会得到一个int类型的结果。如果需要得到short类型结果,必须将这个int类型的结果显式转换为short类型。
  1. class  Test
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 short a,b,c;
  6.                 a=1;
  7.                 b=2;
  8.                 c=(short)a+b;
  9.                 System.out.println(c);
  10.         }
  11. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
唐秀启 + 1

查看全部评分

回复 使用道具 举报
java中低范围的数据类型做运算的时候会自动提升。a和b做相加运算会自动提升为int类型。将一个int类型的结果付给一个short类型的参数显然不行。
回复 使用道具 举报
两个short类型的数运算时,得到的结果是int型的,因此赋给short型变量是错误的,必需强制转换

short a, b, c;
a = 1;
b = 2;
c = (short)(a + b);
回复 使用道具 举报
戚雪晖 黑马帝 2012-2-17 12:21:15
7#
姚立明 发表于 2012-2-17 11:59
我知道a,b既然是short型,再做c=a+b时为什么还要进行强制类型转换

在内存里int类型计算完还是int类型啊,自动提升了啊,你想转成short肯定要强制的,你代码里只要是整数数字,他就默认是int类型
回复 使用道具 举报
彭坤 发表于 2012-2-17 12:04
Java中涉及byte、short和char类型的运算操作,首先会把这些值转换为int类型,然后对int类型值进行运算,最 ...

那java中的+运算也太不智能了吧,C++中“+”都重载了,会自动根据加号两边的变量的类型来返回相应的数据类型的。
回复 使用道具 举报
彭坤 中级黑马 2012-2-17 13:03:05
9#
姚立明 发表于 2012-2-17 12:30
那java中的+运算也太不智能了吧,C++中“+”都重载了,会自动根据加号两边的变量的类型来返回相应的数据 ...

呵呵,老外跟咱们想的不一样,不过也可能有更深入的考量吧
回复 使用道具 举报
沈样 黑马帝 2012-2-17 14:05:53
10#
a=1;
b=2;这里自动转形了变成了int
c=int+int
就会出现这个错误
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马