【问题标题】:How do you get the type of a primitive literal in Java? [duplicate]如何在 Java 中获取原始文字的类型? [复制]
【发布时间】:2020-12-05 19:09:53
【问题描述】:

我刚刚了解到在 long 值之后使用“L”来表示它们是 long 类型,就像在 float 类型之后使用“f”一样。我想知道你写的时候会发生什么;

long value = 3;

而不是

long value = 3L;

所以我想知道;

编译器是否将 3 视为整数,然后将其隐式转换为 long?

然后我尝试通过使用instanceof(但我不能使用它,因为它是原始类型)或反射(getClass())来检查值“3”的类型,但显然我不能,因为它是'不是参考类型)。 是否有办法检查值“3”是什么类型,或者这是不可能的,因为 Java 是静态类型的?

谢谢, 伯纳德

【问题讨论】:

  • 没有@DontKnowMuchButGettingBetter
  • 为什么不呢?请使用该问题的答案显示您的代码,并说明它是如何不起作用的。
  • 因为 OP 不是在谈论 field 的类型,而是在谈论 expression 的类型。
  • 我们知道3是一个int字面量;这是给定的。 Java 会自动将其转换为 long
  • @BernardBorg:您可以通过在 JLS 中查找 3 的类型轻松检查它。

标签: java int long-integer


【解决方案1】:

根据 Java 14 语言规范的section 3.10.1 Integer Literals

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

【讨论】:

  • 这回答了我最初的问题,即“3”是 int 还是 long,但没有回答是否有任何方法可以检查原始值的类型。
  • @BernardBorg:再次,重复问题中的答案完全回答了这个“第二部分”。
  • @BernardBorg:Java 语言规范告诉您3 的类型。您可以通过在那里查找来检查它。
  • 字面量就是它所代表的值。文字由源代码中的一系列“标记”(我的术语)组成。您总是可以通过查看标记来确定类型,作为程序员,您需要知道如何做到这一点——您需要知道 3 是 int,3L 是 long int,'3' 是 char,并且“ 3" 是一个字符串。因此,鉴于您在编写代码时必须知道这一点,因此无需检查运行时设施。
猜你喜欢
  • 1970-01-01
  • 2014-01-16
  • 1970-01-01
  • 1970-01-01
  • 2012-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多