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

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进行了优化。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(7条)

报告相同问题?

悬赏问题

  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛