从毕业开始做Java开发,至今差不多有十年了,相信很多朋友应该跟我一样也是做Java出身,刚学Python时候一直想知道Python和Java到底有哪些区别,搜索半天结果要么不够全面,要么不够直观,所以我就想怎样才能一目了然且全面的展示Java和Python的异同,最终通过查询各种资料,做了下面的表格分享给大家,这样通过对比可以更直观的了解。
- 基本信息对比
Python | Java | |
---|---|---|
发布年份 | 1991年 | 1995年 |
是否开源 | 是,完全开源 | 是,OpenJDK开源 |
编译/解释 | 解释型 | 解释型,需要预编译 |
虚拟机 | 有,但没JVM成熟 | 有,比较成熟 |
运行效率 | 标准Python较低 | 相对较高 |
多线程支持 | 支持 | 支持很好,并实现多核计算 |
变量类型 | 动态变量 | 静态变量 |
语言类型 | 强类型(对!你没有看错) | 强类型 |
设计方法 | 面向对象&面向过程 | 面向对象 |
变量声明 | 不需要声明 | 需要提前声明 |
类库支持 | 强大的标准库,支持第三方高质量库 | 支持大量类库 |
扩展性 | 很强,并可直接调用C/C++编写的代码 | 强,主要通过接口方式扩展 |
兼容性 | Python2和Python3不兼容 | 整体兼容较好 |
开发速度 | 非常快 | 相对较慢 |
主要用途 | 数据分析,科学计算,图像算法等 | 商业逻辑较强,对事务支持较好等 |
支持者们 | 多为开源组织 | 多为商业化大公司 |
学习成本 | 较低,但额外还需学习各种类库 | 相对较高 |
- 基本语法对比
Python | Java | |
---|---|---|
变量定义 | a=0; b='apple'; List = [] |
int a=0; String b="apple"; List<String> list=new ArrayList<String>(); |
权限修饰符 | 双下划线"__"表示“私有”,不显示声明默认为“公共” | public , protected, private |
数据类型 |
Python2 : Numbers, String, List, Tuple, Dictionary Python3 : Numbers, String, List, Tuple, Dictionary, Set |
byte, short, int, long, float, double, char, boolean |
算术运算符 | + 、- 、* 、/ 、% 、**(幂运算) 、//(整除) | + 、- 、* 、/ 、% 、++ 、-- |
比较运算符 | == 、 != 、 > 、 < 、 >= 、 <= | == 、 != 、 > 、 < 、 >= 、 <= |
位运算符 | & 、 | 、 ^ 、 ~ 、 >> 、 << | & 、 | 、 ^ 、 ~ 、>> 、 << |
逻辑运算符 | and 、 or 、 not | && 、 || 、 ! |
成员运算符 | in 、 not in 、 is 、 is not | 不支持 |
关于null值 | test = None | String test = null; |
循环支持 | while 、 for...in | while 、 do...while 、 for |
类库支持 | if...elif...else | if...else if...else 、 switch...case |
异常处理 | try…except…else 、try…except…finally | try…catch…finally |
关于继承 | 可多重继承父类 | 只能继承一个父类 |
代码块 | 按缩进区分代码块 | 使用{ }来区分代码块 |
参数传递 | 引用传递 | 值传递 |