博主以前学过java,学习时通过python和java的对比,觉得更能深刻理解两者之间的差异。
python是一门脚本语言,是一种解释性语言。所谓解释性语言,个人理解就是一边编译,一边执行。
与java不同,java执行前,需要javac进行编译,生成class文件,然后在使用java命令执行。
python变量与java变量的比较
从变量声明上比较
Python在声明变量时不需要说明数据类型,python会自动地根据你所赋的值去判断变量的数据类型。在python中,
a=1 则说明a是整数类型
b=“人生真是寂寞如雪” 则说明b是字符串类型。
但是在java中,我们在声明变量时,必须指定变量的数据类型。在java中
a=1、b=“人生真是寂寞如雪”是非法的,编译报错
在java中,应当这样声明
int a=1
String b=“人生真是寂寞如雪”这样才是合法的。
从存储方式的角度看
python的内存管理机制与java不同。在python中,变量名其实就是一个标识符,它代表的是内存中某一个对象的引用。可以用我们生活中的例子来解释,比如当我们去图书馆借书时,我们总是先通过电脑等设备查找到我们要找的书的位置在哪一层楼,哪一排书架,哪一个书柜,第几列第几行。书的位置其实就是我们所说的引用,它指向了内存中的某一个对象。
如图
当执行a="刘亦菲"时,在内存中创建了两个对象,一个是a,一个是字符串“刘亦菲”,假设“刘亦菲”所在内存空间的地址为0x0001,此时a中存放的值是0x0001.
当执行b=a时,在内存中创建了一个对象b,然后,把a中存放的值赋值给b,此时b中存放的值也是0x0001,也就是说,在这个时候,b也指向了“刘亦菲”这个对象。
当执行a=“小龙女”时,又在内存中创建了一个对象“小龙女”,假设“小龙女”所在的内存空间为0x0011,把该地制值赋值给变量a,此时a中的值为0x0011,此时a指向了“小龙女”这个对象。
在java中,以下列代码为例:
执行过程分析:
main方法进栈,创建一个栈帧,在栈帧中创建了一个变量d,默认初始化为null。然后堆内存中,创建了一个对象,对象的所在空间地址值为0x0022.执行d.name="大黄"时,执行到d.name时,默认初始化为null,在方法区的常量区中创建了一个对象“大黄”,它所在的内存空间地址值为0x0002,然后把0x0002赋值给d.name,此时d.name指向了“大黄。”
当执行到d.age时,默认初始化为0,然后显式赋值为2.
对象初始化完毕。把对象的地址值0x0022赋值给d。
程序继续往下执行,当执行到d.eat()时,eat方法进栈,开辟一个栈帧,然后,在栈帧中创建了一个变量你,然后赋值为10.
变量的命名:
1、必须由字母开头。
2、变量名中可以有数字、字母、下划线。
3、变量名尽量有意义。
虽然下划线命名和驼峰命名法都可以,但是python一般采用下划线命名的方法。
变量赋值
在python中支持:a,b=1,2的赋值写法,也支持a=b=c=1的写法
但是在java中,这种写法都不支持。