1 什么是变量
可以把变量理解为一种容器,可以用它来存储数据或者对象的内存地址。
2 java中的变量
2.1 主数据类型(primitive)& 引用类型(reference)
主数据类型包括:numeric types, boolean type, returnAddress type。跟引用类型相比较,主数据类型存储的是实际值,而引用类型存储的不是数据本身而是数据的引用地址。
`其中需要注意的是 returnAddress 数据只存在于字节码层面,与编程语言无关,也就是说,我们在 Java 语言中是不会直接与 returnAddress 类型的数据打交道的。returnAddress 类型的值是指向字节码的指针,不管是物理机还是虚拟机,运行时内存中的数据总归可分为两类:代码,数据。对于冯诺依曼结构的计算机,指令数据和数值数据都存储在内存中,而哈弗结构的计算机,将程序指令与数据分开存储。对于 JVM 来说,程序就是存储在方法区的字节码指令,而 returnAddress 类型的值就是指向特定指令内存地址的指针`。
3 Python中的变量类型
在Python中一切皆对象,无论什么样的变量保存的都是数据的引用地址。因此在Python中命名变量时不需要强调类型,因为所有的变量存储的都是内存地址。
4 Python与java比较
1. java中的变量分为主数据类型,Python中的变量全是引用类型。
2. java中变量需先声明类型,可以先赋值后引用,且主数据类型的大小固定。Python中的变量无需声明类型,但是创建时必须先赋值。
3. Python中为了提高性能对一些常用的不可变类型数据采用缓存机制。
java中没有类似的机制,每个新创建的变量都是不同的内存空间。