【问题标题】:How do I convert from int to Long in Java?如何在 Java 中将 int 转换为 Long?
【发布时间】:2010-11-21 02:48:13
【问题描述】:

我一直在这里和谷歌上发现从longint 的麻烦,而不是相反。但我敢肯定,在从 int 变为 Long 之前遇到这种情况的人不止我一个。

我发现的唯一其他答案是“首先将其设置为 Long”,这确实没有解决问题。

我最初尝试投射,但得到一个“Cannot cast from int to Long

for (int i = 0; i < myArrayList.size(); ++i ) {
    content = new Content();
    content.setDescription(myArrayList.get(i));
    content.setSequence((Long) i);
    session.save(content);
}

您可以想象我有点困惑,我一直使用int,因为某些内容以ArrayList 的形式出现,而我存储此信息的实体需要序列号作为长。

【问题讨论】:

  • for (long i = 0; i
  • @Instantsoup 是的,这将适用于循环,但正如我在问题底部指定的那样,我正在使用的 ArrayList 在指定要获取的索引位置时需要原始 int
  • long longValue = intValue | 0L;
  • 我所做的是:首先将int 转换为long,然后将long 分配给Long。例如int x = 2; Long y = (long)x;

标签: java casting int long-integer


【解决方案1】:

请注意,转换为 long 和转换为 Long 之间存在差异。如果您转换为 long(原始值),那么它应该自动装箱为 Long(包装它的引用类型)。

您也可以使用new 创建Long 的实例,并使用int 值对其进行初始化。

【讨论】:

  • 为了演示 Earwicker 所说的,您可以调用 Long.valueOf(i),这需要很长时间,但会扩大 int 并返回一个 Long 对象。
  • 自动装箱更可取,因为它不必每次都创建一个新的Long 对象。
  • (警告:此评论的其余部分是猜测和猜想)如果给 Long.valueOf() 的值介于 0 和 128 之间,这是很常见的,并且它返回一个缓存的实例,将比自动装箱更可取? (如果您认为值得,我可能会问一个新问题...)
  • 自动装箱的作用与此相同。顺便说一句,它在 -127 和 128 之间。
  • @Grundlefleck:自动装箱使用Long.valueOf()(如果我没记错的话),所以根本没有区别。我的评论是对答案的回复,而不是您的评论。
【解决方案2】:

使用以下代码:Long.valueOf(int);

【讨论】:

  • 当心,如果您收到一个为空的 Integer 对象,这将生成 NullPointerException。
  • 如果我错了,我认为答案可能是旧的,因为我找不到方法Long.valueOf(int) !!
  • @will824 - 原始“int”变量不能为空。
  • @shareef - 请参阅 serg 的评论 - 但我认为这种方法将 int 转换为 long 自动装箱为 Long...所以似乎是多余的
  • Java中没有这种方法,你误认为是Long.valueOf(long)
【解决方案3】:

如果您已经将 int 类型为 Integer,您可以这样做:

Integer y = 1;
long x = y.longValue();

【讨论】:

    【解决方案4】:

    使用

    new Long(your_integer);
    

    Long.valueOf(your_integer);
    

    【讨论】:

      【解决方案5】:
       1,new Long(intValue);
       2,Long.valueOf(intValue);
      

      【讨论】:

        【解决方案6】:

        怎么样

        int myInt = 88;
        

        // 不会编译

        Long myLong = myInt;
        

        // 编译,并保留 int 的非 NULL 精神。最好的演员表完全不演员表。当然,您的用例可能需要 Long 和可能的 NULL 值。但是,如果 int 或其他 long 是您唯一的输入,并且您的方法可以修改,我会建议这种方法。

        long myLong = myInt;
        

        // 编译,是最有效的方式,并且清楚地表明源值是并且永远不会是 NULL。

        Long myLong = (long) myInt;
        

        【讨论】:

          【解决方案7】:

          我有这个小玩具,它也处理非通用接口。 如果输入错误,我可以抛出 ClassCastException(好的和高兴)

          public class TypeUtil {
              public static long castToLong(Object o) {
                  Number n = (Number) o;
                  return n.longValue();
              }
          }
          

          【讨论】:

            【解决方案8】:

            在 Java 中你可以这样做:

             int myInt=4;
             Long myLong= new Long(myInt);
            

            在你的情况下是:

            content.setSequence(new Long(i));
            

            【讨论】:

              【解决方案9】:

              我们将通过使用Number 引用来获得长值。

              public static long toLong(Number number){
                  return number.longValue();
              }
              

              它适用于所有数字类型,这是一个测试:

              public static void testToLong() throws Exception {
                  assertEquals(0l, toLong(0));   // an int
                  assertEquals(0l, toLong((short)0)); // a short
                  assertEquals(0l, toLong(0l)); // a long
                  assertEquals(0l, toLong((long) 0)); // another long
                  assertEquals(0l, toLong(0.0f));  // a float
                  assertEquals(0l, toLong(0.0));  // a double
              
              }
              

              【讨论】:

                【解决方案10】:

                我在这方面遇到了很多麻烦。我只是想:

                thisBill.IntervalCount = jPaidCountSpinner.getValue();
                

                IntervalCount 是 Long,JSpinner 设置为返回 Long。最终我不得不写这个函数:

                    public static final Long getLong(Object obj) throws IllegalArgumentException {
                    Long rv;
                
                    if((obj.getClass() == Integer.class) || (obj.getClass() == Long.class) || (obj.getClass() == Double.class)) {
                        rv = Long.parseLong(obj.toString());
                    }
                    else if((obj.getClass() == int.class) || (obj.getClass() == long.class) || (obj.getClass() == double.class)) {
                        rv = (Long) obj;
                    }
                    else if(obj.getClass() == String.class) {
                        rv = Long.parseLong(obj.toString());
                    }
                    else {
                        throw new IllegalArgumentException("getLong: type " + obj.getClass() + " = \"" + obj.toString() + "\" unaccounted for");
                    }
                
                    return rv;
                }
                

                这似乎可以解决问题。再多的简单铸造,上述解决方案都不适合我。非常沮丧。

                【讨论】:

                • 如果jPaidCountSpinner.getValue()返回一个实际上是Long的对象,你肯定只需要在前面加上(Long)。还可以尝试在检查 int.classlong.class 等时设置断点。它是否命中过它?如果你有一个类似数字的对象,它将支持java.util.Number,因此将其转换为该对象并调用longValue 方法。在这种情况下,无需通过字符串。所以这个函数可以简化很多,即使你还需要处理字符串。 (这里的部分问题是JSpinner 的参考文档不好)。
                • 我也最终做了这样的事情。我不确定我会收到什么样的数字,并且愿意将其转换为 Long 而不关心效率,但希望避免样板。
                【解决方案11】:
                 //Suppose you have int and you wan to convert it to Long
                 int i=78;
                 //convert to Long
                 Long l=Long.valueOf(i)
                

                【讨论】:

                  【解决方案12】:

                  建议来自 Android Studio lint 检查:删除不必要的装箱:所以,拆箱是:

                  public  static  long  integerToLong (int minute ){
                      int delay = minute*1000;
                      long diff = (long) delay;
                      return  diff ; 
                  }
                  

                  【讨论】:

                    【解决方案13】:

                    一旦只有方法Long.valueOf(long),在使用Long.valueOf(intValue)的情况下,从intlong的转换将被隐式完成。

                    更明确的方法是

                    Integer.valueOf(intValue).longValue()
                    

                    【讨论】:

                    • longValue 只是一个(long),所以你在这里“获得”的唯一东西就是Integer 的内部缓存。
                    • 是的。 (long) intValue 怎么样?
                    【解决方案14】:

                    除了这里推荐的其他方法,也可以试试下面的代码。

                    (long)intValue
                    

                    原始到原始。

                    【讨论】:

                      猜你喜欢
                      • 2015-04-27
                      • 2020-11-21
                      • 1970-01-01
                      • 1970-01-01
                      • 2021-04-16
                      • 2011-07-08
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多