【问题标题】:Integer number too large [duplicate]整数太大[重复]
【发布时间】:2013-07-13 18:15:40
【问题描述】:

您好,我无法理解为什么这不起作用

if(Long.parseLong(morse) == 4545454545){
     System.out.println("2");
}

morse 只是一串数字。问题是它说 Integer number too large: 4545454545,但我敢肯定 Long 可以比这长得多。

【问题讨论】:

  • 我相信你到现在一定已经意识到这个错误了。你正在比较一个整数和一个长整数。 Integer 的最大值为 2147483647,大约是您在此处键入的内容的一半。
  • yup 从来不知道 L 到底有没有资格成为 Long 谢谢

标签: java


【解决方案1】:

您需要使用4545454545l 或4545454545L 将其限定为long。默认情况下,4545454545 是 int 文字,4545454545 超出 int 的范围。

建议使用大写字母L 以避免混淆,因为l 和1 看起来很相似

你可以这样做:

if(Long.valueOf(4545454545l).equals(Long.parseLong(morse)) ){
     System.out.println("2");
}

或

if(Long.parseLong(morse) == 4545454545l){
   System.out.println("2");
}

根据JLS 3.10.1:

如果整数文字以 ASCII 字母 L 或 l (ell) 为后缀,则其为 long 类型;否则它是 int 类型(§4.2.1)。

【讨论】:

  • 由于parseLong() 返回一个原始的long,所以不需要使用.equals() - == 就可以了。
  • 不要使用l,使用L。两者的含义相同,但前者可能会引起混淆,因为它可能看起来像 1。
【解决方案2】:

如果你的整数值大于2147483647,就像你的字面量一样,那么你需要使用长字面量:

4545454545L

...请注意末尾的 L,这是 long 和 int 文字之间的区别。小写的l 也可以,但可读性较差,因为它很容易与 1 混淆(当您处理数字时,这不是一件好事!)

【讨论】:

    【解决方案3】:

    您需要使用4545454545L 或4545454545l 来限定它。

    【讨论】:

    • Long.parseLong() 返回一个 long(原始类型)。使用 == 很好。
    猜你喜欢
    • 2016-08-14
    • 1970-01-01
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-29
    • 1970-01-01
    相关资源
    最近更新 更多