【问题标题】:How does casting long to integer work? [duplicate]将 long 转换为整数如何工作? [复制]
【发布时间】:2015-07-02 14:48:08
【问题描述】:

我正在编写一些代码,我必须将 long 转换为 int。输入以字符串形式出现,但实际数字太大而无法立即解析为 int。所以我尝试将其解析为 long,然后转换为 int,这很有效,也让我感到困惑,因为我认为它不会。

public void setNum(String Num) {
   if (Num != null){
       //THIS MAKES NO SENSE **to me** :(
        this.Num = (int) Long.parseLong(Num); 
   } else {
        this.Num = -1;
   }
}

我已经阅读了我在这里找到的其他几个主题,特别是 this one,虽然它讨论了如何安全地转换它们,但它没有解释这个过程是如何工作的,我很好奇至于它是怎么做的。我知道如果 long 为 > Integer.MAX_VALUE 会导致数据在转换时被更改,我仍然对转换的实际工作方式感到困惑。

【问题讨论】:

标签: java casting integer long-integer


【解决方案1】:

如果Long.parseLong(Num) 返回的值高于Integer.MAX_VALUE 或低于Integer.MIN_VALUE,则将其强制转换为int 将导致不正确的值。

对于正整数,将它们转换为 int 仅意味着将 32 个最低位分配给整数变量。我不确定负多头是否相同(我必须检查一下)。

【讨论】:

  • 所以如果我给 setNum() 一个像 123456789012345 这样的数字,然后转换为一个 int,它不会返回相同的数字?
  • @Scrambo 不,它不会
  • @Scrambo 你为什么不试试看?
  • @Eran 原来我也有一个小错误。我正在打印数字的字符串值而不是转换后的值。打印出铸造的 int 后,它不是同一个数字。感谢您的帮助!
  • @Scrambo 不客气
猜你喜欢
  • 1970-01-01
  • 2017-10-03
  • 2021-02-01
  • 2018-04-07
  • 1970-01-01
  • 2021-08-01
  • 2013-07-23
  • 2019-03-15
  • 2015-09-18
相关资源
最近更新 更多