黑马程序员技术交流社区

标题: 关于数据类型的一点困惑 [打印本页]

作者: 姚立明    时间: 2012-2-17 11:22
标题: 关于数据类型的一点困惑
我定义了如下的类:
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 个错误


作者: 戚雪晖    时间: 2012-2-17 11:53
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);

作者: 姚立明    时间: 2012-2-17 11:59
我知道a,b既然是short型,再做c=a+b时为什么还要进行强制类型转换
作者: 彭坤    时间: 2012-2-17 12:04
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. }
复制代码

作者: 马欢    时间: 2012-2-17 12:11
java中低范围的数据类型做运算的时候会自动提升。a和b做相加运算会自动提升为int类型。将一个int类型的结果付给一个short类型的参数显然不行。
作者: 彭小芳    时间: 2012-2-17 12:19
两个short类型的数运算时,得到的结果是int型的,因此赋给short型变量是错误的,必需强制转换

short a, b, c;
a = 1;
b = 2;
c = (short)(a + b);
作者: 戚雪晖    时间: 2012-2-17 12:21
姚立明 发表于 2012-2-17 11:59
我知道a,b既然是short型,再做c=a+b时为什么还要进行强制类型转换

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

那java中的+运算也太不智能了吧,C++中“+”都重载了,会自动根据加号两边的变量的类型来返回相应的数据类型的。
作者: 彭坤    时间: 2012-2-17 13:03
姚立明 发表于 2012-2-17 12:30
那java中的+运算也太不智能了吧,C++中“+”都重载了,会自动根据加号两边的变量的类型来返回相应的数据 ...

呵呵,老外跟咱们想的不一样,不过也可能有更深入的考量吧
作者: 沈样    时间: 2012-2-17 14:05
a=1;
b=2;这里自动转形了变成了int
c=int+int
就会出现这个错误




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2