python 和 java的区别( 不断更新中 )
2022-04-12 本文已影响0人
shengjk1
- python 跟 java 一样时强类型语言,也就是说它不会根据环境变化自动改变数据类型
- python 是动态语言,而 java 是静态语言。也就是说 python 在编程时,永远不用给任何变量指定数据类型,而 java 写程序时必须声明所有变量的数据类型
- python 的模块类似于 java 的 class,不过python模块导入会执行 代码的内容,而 java 不会
- python 与 java 的执行方式还是蛮像的,都是将源码编译成 byte code 然后交给相应的虚拟机去执行
- Python为了优化速度,避免为整数频繁申请和销毁内存空间,使用了小整数对象池。对小整数的定义是 [-5, 256] 这些整数对象是提前建立好的,不会被垃圾回收。在这个范围内所有的整数都只会被建立一次 与 java 类似,java 叫常量池,[-128,127],通过 IntegerCache 来实现的 ( Integer [-128,127)
- 大整数池: python为了避免创建大整数浪费的内存空间和时间,将创建过的大整数加入大整数池。python中大整数池,默认大整数池里面为空,每一个py程序都有一个大整数池。使用大整数时如果大整数池里不存在该整数的话,会新建一个大整数对象。下次使用大整数时直接使用大整数池里的对象,而不是创建新的对象 。终端是每次执行一次,所以每次的大整数都重新创建,而在pycharm中,每次运行是所有代码都加载都内存中,属于一个整体,所以。这个时候会有一个大整数对象池,即处于一个代码块的大整数是同一个对象。c1 和d1 处于一个代码块,而c1.b和c2.b分别有自己的代码块,所以不相等。 类似于 java 的 字符串常量池,java 不一样,基本数据类型在同一个 jvm 中都会重用。
- 如果是其他普通类型对象的新建,python会请求内存,申请内存 。当n1的引用指向其他对象时,原有对象的引用计数会自动减1,没有被引用的对象会立即回收( 引用计数法 )。与 java 类似,但 java 不是通过引用计数来回收垃圾的,而是通过 到 GCROOT 的路径通不通来回收垃圾的 ( 可达性分析法 )
- python 中有全局变量,而 java 中没有
- python引用变量的顺序: Local ->Enclosing ->Global ->Built-in ,与 java 一样,就近原则
- Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如 if/elif/else/、try/except、for/while等)是不会引入新的作用域的,也就是说这些语句内定义的变量,外部也可以访问, 与 java 类似
- python中的字典 key 不能是可变的,可变的会报错,而java中没有此限制,虽然说可能不应该以可变对象为 key
- python 的序列( list )、字典( dict )、集合( set ),都可以是混合类型
- python 的函数在一定的程序上可以类比于 java 的方法,但函数是不同于方法的
- Python 函数的 return 语句可以返回任意类型,也就是说 Python 的函数并没有固定的返回类型,符合动态语言的标识,而java 只能返回特定的类型
- Python 函数的参数可以通过关键字指定,而 java 方法不可以。Python 函数有默认参数,而 java方法 没有
- 当我们在函数中引用一个变量时,Python 将隐式地默认该变量为全局变量。但是,一旦变量在没有 global关键字修饰的情况下进行了修改操作,Python 会将其作为局部变量处理,并在外部作用域中隐藏任何类似命名的变量
- python 的函数定义也可以嵌套,而 java 不可以
- python 中的 模块( module ) 其实就是python源文件,package + module 构成了 Python 中的依赖,与 java 类似