整数过大

4

你好,我不明白为什么它不能正常工作。

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

在这里,morse只是一个数字字符串。问题在于它说:“整数太大:4545454545”,但我确信Long可以比那个更长。


我相信你现在一定已经意识到了错误。你正在比较一个整数和一个长整型。整数的最大值是2147483647,这只有你输入的数值的一半左右。 - dharam
哦,我从来不知道在数字后面加上L可以将其声明为长整型,谢谢。 - Strife
3个回答

18

您需要使用4545454545l4545454545L将其标识为long。默认情况下,4545454545是一个int字面量,而4545454545超出了int的范围。

建议使用大写字母L以避免混淆,因为l1看起来非常相似

您可以执行以下操作:

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(小写L),则其类型为long;否则它的类型为int(§4.2.1)。

3
由于 parseLong() 返回的是一个基本类型的 long,所以不需要使用 .equals() - 使用 == 就可以了。 - Michael Berry
不要使用 l,请使用 L。两者的意思相同,但前者可能会引起混淆,因为它看起来像是数字 1 - arshajii

4
如果您的整数值大于 2147483647,那么您需要使用长整型字面量:4545454545L。请注意结尾处的 L,这是长整型字面量和整型字面量之间的区别。小写的 l 也可以使用,但可读性较差,因为很容易与数字 1 混淆(当您处理数字时可能会出现问题)。

2

您需要使用4545454545L4545454545l将其标记为长整型。


1
Long.parseLong() 返回一个 long(原始类型)。使用 == 是可以的。 - JB Nizet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接