3

假设我有类似的东西

int x = 2 + 3;

x认为是一个字面?

4

5 回答 5

16

x是一个符号。2 + 3是一个表达式。2并且3是文字。

于 2010-05-10T06:23:34.683 回答
9

不,它是编译时常量表达式中的两个文字。根据它的编译方式,您可能无法区分生成的二进制文件。

于 2010-05-10T06:23:17.807 回答
8
  • int - 变量的类型,标识符
  • x - 变量名,标识符
  • = - 分配
  • 2 - 文字
  • + - 两个字面量之间的操作
  • 3 - 文字
  • ; - 声明结束
于 2010-05-10T07:19:15.117 回答
1
  • int是一种类型
  • x是一个标识符
  • =,+是运算符
  • 2,3是文字,因为“StringLiteral”将是

要了解所有这些语法元素是如何命名的,您可以浏览 ig

http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.html

http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html

于 2010-05-10T06:38:29.413 回答
1

是的,这是一个字面意思。表达式将被简化为文字,即甚至在程序运行之前,所以它是文字

您可能在现实世界中看到的其他类型的文字(程序员不必自己计算它,让编译器完成确定文字的繁重工作):

常量无符号整数 NEGATIVE_TESTER_FOR_32_BIT = 1 << 31;

const char ALPHABET_PIVOT = 'A' + (('Z' - 'A') / 2);

[编辑:取决于编译器] 是的,它取决于编译器。但我想大多数编译器编写者都会做功课,如果他们可以生成语言的必要汇编或虚拟机指令,那么在编译时计算东西对他们来说只是在公园里散步。事实上,即使是字符文字 'H' 例如,它甚至不会作为逐字'H'存储在文件中,而是在最终机器代码中存储为数字文字(72,或十六进制视图 0x48 或 48h)。我可以冒险猜测所有编译器都会将这两个文字简化为文字,而不是表达式。对他们来说这是在公园里散步(编译器作家)

于 2010-05-10T07:02:58.863 回答