开发者社区> 问答> 正文

Java性能优化:为什么不要对超出范围的基本数据类型做向下强制转型?

Java性能优化:为什么不要对超出范围的基本数据类型做向下强制转型?

展开
收起
我是小美女 2021-11-01 10:20:58 878 0
3 条回答
写回答
取消 提交回答
  • 无所不能的蛋蛋

    这样会出现错误,得不到想要的结果

    2021-11-04 15:16:47
    赞同 展开评论 打赏
  • 会出现错误

    2021-11-01 10:28:23
    赞同 展开评论 打赏
  • 网络规划设计师、敏捷专家、CISP、ITSS服务经理、ACA全科目、ACP4项、ACE、CBP、CDSP、CZTP等。拥有 PRINCE2 Foundation/Practitioner、CCSK、ITIL、ISO27001、PMP等多项国际认证。 专利5+、期刊10+、知识产权师。核心期刊审稿人。

    您好,不会得到想要的结果:

    public static void main(String[] args)
    {
    long l = 12345678901234L;int i = (int)l;
    System.out.println(i);
    }
    
    

    我们可能期望得到其中的某几位,但是结果却是:

    1942892530
    
    

    解释一下。Java中long是8个字节64位的,所以12345678901234在计算机中的表示应该是:

    0000 0000 0000 0000 0000 1011 0011 1010 0111 0011 1100 1110 0010 1111 1111 0010
    
    

    一个int型数据是4个字节32位的,从低位取出上面这串二进制数据的前32位是:

    0111 0011 1100 1110 0010 1111 1111 0010
    
    

    这串二进制表示为十进制1942892530,所以就是我们上面的控制台上输出的内容。从这个例子上还能顺便得到两个结论:

    整型默认的数据类型是int,long l = 12345678901234L,这个数字已经超出了int的范围了,所以最后有一个L,表示这是一个long型数。顺便,浮点型的默认类型是double,所以定义float的时候要写成””float f = 3.5f”
    接下来再写一句”int ii = l + i;”会报错,因为long + int是一个long,不能赋值给int
    
    2021-11-01 10:26:30
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载