假设我有类似的东西
int x = 2 + 3;
被x
认为是一个字面?
x
是一个符号。2 + 3
是一个表达式。2
并且3
是文字。
不,它是编译时常量表达式中的两个文字。根据它的编译方式,您可能无法区分生成的二进制文件。
要了解所有这些语法元素是如何命名的,您可以浏览 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
是的,这是一个字面意思。表达式将被简化为文字,即甚至在程序运行之前,所以它是文字
您可能在现实世界中看到的其他类型的文字(程序员不必自己计算它,让编译器完成确定文字的繁重工作):
常量无符号整数 NEGATIVE_TESTER_FOR_32_BIT = 1 << 31;
const char ALPHABET_PIVOT = 'A' + (('Z' - 'A') / 2);
[编辑:取决于编译器] 是的,它取决于编译器。但我想大多数编译器编写者都会做功课,如果他们可以生成语言的必要汇编或虚拟机指令,那么在编译时计算东西对他们来说只是在公园里散步。事实上,即使是字符文字 'H' 例如,它甚至不会作为逐字'H'存储在文件中,而是在最终机器代码中存储为数字文字(72,或十六进制视图 0x48 或 48h)。我可以冒险猜测所有编译器都会将这两个文字简化为文字,而不是表达式。对他们来说这是在公园里散步(编译器作家)