值与文字之间的差异

时间:2013-09-24 00:13:01

标签: dynamic static literals

价值观和文字之间有什么区别?根据{{​​3}}中第一页的第四张幻灯片,值显然具有动态类型,文字显然具有静态类型。但这不是一个字面值吗?

1 个答案:

答案 0 :(得分:0)

使用幻灯片中使用的术语 - 文字是一种容器,因此在值和容器之间进行比较会更好。

容器“包含”一个值。如果您编写int x=1;,则x是一个容器,第一个是值。但是1也是一个容器 - 更确切地说,是一个文字。幻灯片显示值1和文字1之间存在差异。

编码时,您实际上无法直接访问值 - 您只能通过容器来执行。这就是为什么你可以写x1,而不是第一个值。

文字是一个容器,可以直接转换为值而不会查看它的周围 - 例如1可以直接转换为第一个。 x无法以这种方式转换为值,因为它是一个变量,除非我们查看周围的代码,否则我们不知道它是什么。

对于动态与静态类型 - 容器具有静态类型,在编译时已知。如果它是变量,则它是变量的声明类型。如果它是表达式,则它是表达式的推断类型。如果它是文字,则它是文字的直接类型。编译器可以在不运行程序的情况下告诉每个容器的类型,并且无需关心程序运行后它将保留的值。

另一方面,值作为一系列字节存储在存储器中。类型数据也存储在值附近的内存中(除非它是原始值),这就是值的类型是动态的 - 因为如果要发现值的类型,则必须在运行时查看内存。

即使值的类型是动态的,Java也是一种静态语言,因为您通常不会查看动态类型。由于您只能通过容器引用值,因此在使用该值执行操作时将使用容器的静态类型。