HankLee67
2017-03-29 00:54
采纳率: 33.3%
浏览 2.0k
已采纳

java中强制类型转换的问题

作为初学者,我想验证下强制类型转换后能否输出的问题,不在乎是否丢失精度哈,写了下面一段代码,为什么一输出就报错呢?
public class QiangZhiZhuanHuan1
{
public static void main(String[] args)
{
int a=12;
byte b=13;
byte c=(byte)a+b;
System.out.println(c);
}
}
改成下面这样才不会出错:
public class QiangZhiZhuanHuan1
{
public static void main(String[] args)
{
int a=12;
byte b=13;
byte c=(byte)(a+b);
System.out.println(c);
}
}

有点不太明白,变量b已经在前面定义为byte类型啦,什么在进行强制转换时候还需要对(a+b)的结果进行转换,我直接对a进行强制类型转换成byte类型,然后再和b相加不行吗?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

8条回答 默认 最新

  • icecoola_ 2017-03-29 05:33
    已采纳

    粘过来的,Java类型转换
    (1)boolean类型不参与转换
    (2)默认转换
    A:从小到大
    B:byte,short,char --> int long float double
    C:byte,short,char之间是平级的,不相互转换,直接转成int类型参与运算。
    (3)强制转换
    A:从大到小
    B:可能会有精度的损失,一般不建议这样使用。
    C:格式:
    目标数据类型 变量名 = (目标数据类型) (被转换的数据);

    A:下面两种方式有区别吗?
    float f1 = 12.345f;
    float f2 = (float)12.345;向下类型转换,浮点数默认是double类型
    B:下面的程序有问题吗,如果有,在哪里呢?
    byte b1 = 3;
    byte b2 = 4;
    byte b3 = b1 + b2;
    short s1=3;
    short s2=3;
    short s3=s1+s2;
    char c1=3;
    char c2=4;
    char c3=c1+c2;
    byte、short、char在运算时,会自动向上转型为int型,所以返回的结果是int类型,而返回值的类型均不是int,由于类型不匹配,所以报错
    byte b4 = 3 + 4;
    short s=3+4;
    常量进行计算后的值,预编译时能够判断其是否超出范围
    int a=1;
    int b=2;
    int c=a+b;
    long l1=3l;
    long l2=3l;
    long l3=l1+l2;
    float f1=2.3f;
    float f2=2.3f;
    float f3=f1+f2;
    double d1=3.7;
    double d2=3.9;
    double d3=d1+d2;
    均不会报错,因为整数常用,java进行了优化。

    点赞 打赏 评论
  • KnowsHow 2017-03-29 00:54

    byte'char'shot在进行混合运算是会自动提升为int类型,所以你的结果只需要你的第二种方式就行了,第一个类型还需要强制转换!

    点赞 打赏 评论
  • 休想谋害朕 2017-03-29 01:32

    byte c=(byte)a+b 这句话你的意思应该是先把int类型的a变成byte然后再和byte类型的b相加最后再把结果赋值给byte类型的c
    这样会报错的原因是因为c是byte类型的变量值不确定,转换后的a和b相加的结果可能会超出byte所能装下的最大数值

    点赞 打赏 评论
  • 转角人生 2017-03-29 01:35

    你可以这样想:第一种:a假设强制转化成功,那么两个byte相加可能就是int,也可能是byte ,而你却用byte接收,肯定错误。
    第二种:a+b自动提升为int。你强制转换成byte是可以的。所以用byte接收也是可以的。

    点赞 打赏 评论
  • kk1993wangliang 2017-03-29 01:40

    byte+byte=int 我记得是这样,所以你还得再强制转换一次才行,其实只需要对结果进行转换就好啦!就像你的第二种方式

    点赞 打赏 评论
  • java--jack 2017-03-29 01:56

    你可以这样想:第一种:a假设强制转化成功,那么两个byte相加可能就是int,也可能是byte ,而你却用byte接收,肯定错误。
    第二种:a+b自动提升为int。你强制转换成byte是可以的。所以用byte接收也是可以的。

    点赞 打赏 评论
  • ybfqsun 2017-03-29 02:10

    byte+byte自动提升为int

    点赞 打赏 评论
  • HankLee67 2017-03-29 06:10

    非常感谢,各位朋友们的帮助,初学java,后期还希望大家能够多多指教。

    点赞 打赏 评论

相关推荐 更多相似问题