值和文字有什么区别?根据Here第一页的幻灯片四,值显然具有动态类型,而文字显然具有静态类型。但是文字不是一个值吗?
1 回答
使用该幻灯片中使用的术语 - 文字是一种容器,因此最好在值和容器之间进行比较。
容器“包含”一个值。如果你写int x=1;
, thenx
是一个容器,第一个是一个值。但1
也是一个容器——更准确地说,是一个字面量。幻灯片强调值 one 和字面量之间存在差异1
。
当你编码时,你实际上不能直接访问值——你只能通过容器来做。这就是为什么你可以写x
and 1
,但不能写第一的值。
字面量是一个容器,可以直接翻译成一个值而无需查看它的周围环境——例如1
可以直接翻译成数字一。x
不能以这种方式转换为值,因为它是一个变量,除非我们查看周围的代码,否则我们不知道它包含什么。
至于动态与静态类型 - 容器具有静态类型,在编译时已知。如果它是一个变量,它是变量的声明类型。如果是表达式,则它是表达式的推断类型。如果它是文字,它是文字的直接类型。编译器可以在不运行程序的情况下判断每个容器的类型,也不关心程序运行后它会保存什么值。
另一方面,一个值作为一系列字节存储在内存中。类型数据也存储在值附近的内存中(除非它是原始值),这就是为什么值的类型是动态的 - 因为如果你想发现一个值的类型,你必须在运行时查看内存。
尽管值的类型是动态的,但 Java 是一种静态语言,因为您通常不会查看动态类型。由于您只能通过容器引用一个值,因此当您使用该值执行操作时,将使用容器的静态类型。