python 和 java的区别( 不断更新中 )

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

你可能感兴趣的:(python 和 java的区别( 不断更新中 ))