Java 长文字

Java long literals

其中哪一个表达式被认为是 java 长文字:

1) 0Xf000L

2) 6L

3) (489 - 0L) / 80

4) 30508600000

5) 0XBD000


我的回答:

1) 被认为是因为 "L" 结束

2) 同第一个

3) 不是文字而是一种计算?

4) 长期为大数

5) 不是长文字

如果我有什么地方不对请指正。另外,如果我们正在初始化的 long 变量最后没有 "L" ,它仍然被认为是 long literal 吗?因为如果我在编译器中这样做,它会让我这样做(例如 5. 问题)谢谢!

对于 1) 和 2) 你是完全正确的,它们是长文字。

3)、正确:这是一个long类型的常量表达式。尽管它是一个 compile-time 常量,但它不算作文字。

4) 不,这并不太大,装不下 long。但是,由于它没有 L 后缀,因此不算作 long。这是一个 int,但同时太大而无法放入 int,因此正如评论中所讨论的,这是一个 compile-time 错误。

5) 是一个 int 文字。它可以在任何需要 long 值的地方使用(例如,分配给 long 变量),但你是对的,这不会使它成为一个长文字。

基本规则如 RealSkeptic 所说:“整数文字如果以 ASCII 字母 L 或 l (ell) 为后缀,则为 long 类型;否则它是 int 类型 (§4.2.1)。” (此处引用自JLS section 3.10.1)。

(只是为了登上肥皂盒,引用继续:后缀 L 是首选,因为字母 l(ell)通常很难与数字 1(一)区分开来。)