在Java中初始化一个长整型

244

Oracle文档-原始数据类型指出Java中的long范围是-9,223,372,036,854,775,8089,223,372,036,854,775,807。 但是当我在Eclipse中执行以下操作时:

long i = 12345678910;

它显示了一个错误信息 "The literal 12345678910 of type int is out of range"。

有两个问题。

1)如何使用值12345678910初始化 long

2)所有数字字面量默认都是 int 类型吗?


那么如何初始化一个Long? - Wolfgang Fahl
1
@WolfgangFahl 对于Long也有同样的规则 - 由于自动装箱,您可以使用Long i = 12345678910L,或者对于那些无法使用自动装箱的情况,可以使用Long i = Long.valueOf(12345678910L) - Dorian Gray
4个回答

476
  1. 你应该添加 L: long i = 12345678910L;.
  2. 是的。

顺便说一句:它不一定要是大写的 L,但小写的 L 经常会被误认为是数字 1 :).


3
如果有人想知道的话:同样适用于十六进制,例如 0x200000000L - user149408
@Victor Long.valueOf(long) 返回一个Long对象,而不是基本类型的long。MByD的解决方案避免了依赖自动装箱。 - gouessej
@user149408 也许你的意思是 0x20000000L - Pluto
2
@Pluto 0x20000000L 可以工作,但仍然可以用 int(32位整数)表示,因此 0x20000000 也同样适用。 0x200000000L 超出了这个界限,因此需要使用尾随的 L - user149408

71
  1. 您需要在数字末尾添加L字符,以便Java将其识别为长整型。

long i = 12345678910L;
  • 是的。

  • 参见基本数据类型,其中提到:“如果一个整数字面量以字母L或l结尾,则其类型是long;否则它的类型是int。”


    43

    你需要在末尾添加大写字母L,就像这样

    long i = 12345678910L;
    

    对于带有3.0f的浮点数同样适用。

    这应该可以回答你的两个问题。


    20

    要初始化长整型,你需要在末尾添加“L”。
    它可以是大写或小写。

    所有数字值默认为int。 即使您对byte执行任何整数操作,byte也会首先提升为int,然后再执行任何操作。

    请尝试此操作

    byte a = 1; // declare a byte
    a = a*2; //  you will get error here
    
    你之所以会报错是因为2默认为int类型。因此你试图将byteint相乘。结果被转换成int类型,无法重新赋值给byte

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