Java与Python常见语法对比及区别

这里写目录标题

  • 一、前记
    • 1.1为什么写这篇文章?
    • 1.2 本文的结构
  • 二、整体区别
    • 2.1 差异总结十句话
    • 2.2整体对比
  • 三、细节区别
    • 3.1数据类型
    • 3.2其他数据结构
    • 3.3 String的处理方法
    • 3.4数组
    • 3.5条件语句
    • 3.6循环语句
    • 3.7类和接口定义与调用
  • 四 其他技巧知识
    • 字节的换算Tips:
    • python中的is 关键字
  • 四、参考文献

一、前记

1.1为什么写这篇文章?

因为JAVA是上世纪90年代以来伴随着互联网发展最成功的WEB应用语言,所以JAVA在中国互联网市场上仍是需求量巨大的。
然而,随着ML、DL科研的需求,python兴起,一系列python相关的DL、ML包都出来了。
因此,在开展新技术研究和应用落地过程中,常存在python科研探索,JAVA落地应用,或者两者混合的情况,如何平衡两者之间语法的区别,减少混淆,是本文的出发点。

1.2 本文的结构

本文将从整体区别和系列区别两个方面对比Python和JAVA的差异性和一致性。

二、整体区别

两种语言的相同之处不在骜诉,但是不同之处还是很有混淆性的。

2.1 差异总结十句话

  • 动态且更简洁的Python善用:和缩进,少用(),不用{}和;。
  • python是胶水语言,逐行执行,更为动态、可视化;
  • Python注释是#,java注释是//
  • Python中弱化了接口,强调函数链式编程,而JAVA强调面向接口编程;
  • python中string是一个普通类型,而java中String是一个包装类型,但本质都是指针引用;
  • python中的in关键字在for循环中很常用,is在类型判别,而java中没有in/is关键字;

2.2整体对比

类型 Java Python
变量类型 静态类型。java所有变量的类型必须被明确定义,且只能赋予相同类型的值,否则会类型异常。java集合对象(如:Vector和ArrayList)里面可以保存了通用类型对象,但是无法保存基本类型,如int等。要保存int到Vector,你必须先要转换int到Integer(注:这里指的1.5版以前的java)。同样的,当你要从集合中取出一个对象时,已经不记得对象的类型,必须显示转换为期望的类型。 动态类型。Python里面变量的类型根据赋值的变化,可以是任意类型。如果变量已经被赋予某个类型对象,之后还可以被赋予另外一个不同类型的对象。Python的集合对象(如:lists和dictionaries)里面可以保存任意类型的对象,包括数字和lists。当你从集合中取出一个对象是,他仍然记得这个对象的类型,所以无需进行类型转换。
代码结构 冗长,必须使用{}管理语句体,使用;结束语句,所有变量使用前需要预先定义且注意作用域。 简洁,无需多余的{}和;语句就能完成目标,强制要求缩进正确。紧凑,在新的黑客字典里,Eric S. Raymond给予了“紧凑”这样的定义:Compact adj. 在设计中,描述有价值的特性并能够被人们立马理解。

三、细节区别

3.1数据类型

下表中数据类型划分为基本数据类型和引用数据类型,该划分方式遵循的是JAVA的语法划分方式,Python并不特意区分,都称之为标准数据类型,Python3 中有六个标准的数据类型:Number(数字)、String(字符串)、List(列表)、Tuple(元组)、Set(集合)、Dictionary(字典)。但是,python区分可变数据类型和不可变数据类型,其中,不可变数据:Number(数字)、String(字符串)、Tuple(元组);可变数据:List(列表)、Dictionary(字典)、Set(集合)。python不可变数据类型的本质和JAVA的基本数据类型相近,因此,沿用。

数据类型 Java Python
基本数据类型 Java 有八种基本数据类型,包括 boolean、char、byte、short、int、long、float 和 double Python3 中不可变数据类型:Number(数字)(整型int、浮点型float、复数complex,python3的整型没有限制大小,可以当作Long类型使用,且布尔bool是整型的子类型)、String(字符串)(英文双引号或英文单引号括起来的内容,被定义为字符串)、Tuple(元组)
引用数据类型 对象(最常见的字符串)、接口和数组等 可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。

由此可见,Python中的String更为普通,不如JAVA中的细化和复杂。

3.2其他数据结构

数据结构 Java Python
字符串 String s = “XXX” s = “XXX”
静态数组 T[] dirs = new T[5] [0]*5
动态数组 ArrayList []
链表 LinkedList N/A
OrderedSet TreeSet N/A
OrderedMap TreeMap N/A
HashSet HashSet set()
HashMap HashMap dict()
PriorityQueue []/heapq.*
队列 Queue collections.deque()
双端队列 Deque collections.deque()
Stack []/collections.deque()

由此可见,Python中的其他数据结构更为简单,不如JAVA中的细化和复杂。

3.3 String的处理方法

字符串方法 Java Python
字符串 String s = “XXX” s = “XXX”
创建字符串 String s = “XXX” s = “XXX”
将指定的子串str1替换为目标子串str2 s.replace(str1,str2) s.replace(str1,str2)
切片 s.substring(3)/s.substring(3,5) s[3:]/s[3:5]
查找子串位置 s.indexOf(str,x) s.find(str,x)
大小写方法 s.toUpperCase()/s.toLowerCase() s.title()/s.lower()/s.upper()
去除空白方法 s.trim() s.strip()/s.lstrip()/s.rstrip()
判断是否以指定子串开头 s.startsWith(str) s.startswith(str)
判断是否以指定子串结尾 s.endsWith(str) s.endswith(str)
获取指定索引的字符 s.charAt(x) s[x]

3.4数组

数组方法 Java Python
创建静态数组(字面量) int []a = new int[]{1,2,3} a = [1,2,3]
创建一维动态数组 int []a = new int[n]/Array.fill(a,x) a = [x]*n
创建二维动态数组 int [][]a = new int[m][n]/for (int []row:a){Array.fill(row,x)} a = [[x]*n for _ in range(m)]
添加元素 a.Add(x) a.append(x)/a.extend(x)
删除元素 a.remove() a.remove()/del a[x]

3.5条件语句

Java条件语句

public class IfStatement {
    public static void main(String args[]) {
        int grades = 99;
        if(grades >= 60 && grades<= 70) {
            System.out.println("及格");
        } else if(grades > 70 && grades<= 80){
            System.out.println("一般");
        } else if(grades > 80 && grades<= 90){
            System.out.println("优秀");
        }else if(grades > 90){
            System.out.println("牛");
        }else {
            System.out.println("不及格");
        }
    }
}

Python条件语句

if __name__ == '__main__':
	if age >= 18:
	    print('已经成年,可以上网')
	else:
		print('未成年,不能独立上网')

3.6循环语句

Java while 和for 循环语句

public class WhileDemo02 {
    public static void main(String[] args) {
        //输出1+2+3+...+100=
        int i = 0;
        int sum = 0;
        while (i <100) {
            i++;
            sum = sum + i;
        }
        System.out.println(sum);
    }
}
public class ForDemo01 {
    public static void main(String[] args) {
        //初始化//判断条件//迭代
        for(int i=1;i<=100;i++){
            System.out.println(i);
        }
        System.out.println("for循环结束");
        //   在IDEA中 100.for可快速生成for循环
    }
}

python while 和for 循环语句

if __name__=='__main__':
	i = 1		#初始化一个变量
	m = 0
	while i <= 100:
		m += i
		i += 1
	print(m)

for 循环是python中的另外一种循环语句,提供了python中最强大的循环结构,它可以循环遍历多种序列项目,如一个列表或者一个字符串(sequence可以试列表元组集合,如果是字典只能遍历keys,无法遍历values)
语法:

for <variable> in <sequence>:
	<statements>
else:
	<statements>
例如:
list01 = ['joe','susan','jack','tom']
for i in list01:	#遍历list01列表,将列表中元素依次赋值给变量i
	print(i)		#输出i直到将所有的元素遍历完毕停止遍历

以上显示的python for循环是直接遍历元素的,当然,也可以通过index的方式访问,那就是需要通过range(0,len(arr)),获得元素列表,然后用for item in range(0,len(arr)):来执行。

3.7类和接口定义与调用

JAVA类定义

[修饰符] class 类名 [extends 父类名] [implements 接口名]{
  // 类体,包括类的成员变量和成员方法
  [修饰符] 数据类型 变量名 [ =];
  [修饰符] [返回值类型] 方法名([参数类型 参数名1,参数类型 参数名2,...]){
  //方法体
  ...
  return 返回值; //当方法的返回值类型为void时,return及其返回值可以省略
  }
  [修饰符] 构造方法名与类名一致([参数类型 参数名1,参数类型 参数名2,...]){
  //方法体
  ...
  }
}

JAVA类的实例

public class Person {
int age = 10;    // 类中定义的变量被称作成员变量
string name;
void speak() {
	System.out.println("我今年" + this.age + "岁了!");
}
public Person(string name,int age){
	this.age=age;
	this.name=name;
}
//提供了内部的静态方法,这个方法是不会被实例化的,python中也有staticmethod注解
public static void main(string[] args){
	Person xiaomingPerson=new Person("xiaoming",18);
	xiaomingPerson.speak()
}
}

Python类定义

class 类名(继承的父类名):
	变量名 [ =]
	def 方法名([参数类型 参数名1,参数类型 参数名2,...]):
		pass
	def __init__(self):
        pass

JAVA类的实例

class Person:
	age = 10;    # 类中定义的变量被称作成员变量
	name;
	def speak(self):
		print("我今年" + age + "岁了!")
	def __init__(self,name,age):
		self.age=age
		self.name=name
if __name__ == '__main__':
	xiaomingPerson=Person("xiaoming",18)
	xiaomingPerson.speak()

python里无接口类型,定义接口只是一个人为规定,在编程过程自我约束,python的类是可以写任意个方法的,定义一个接口对继承类进行约束,接口里有什么方法,继承类就必须有什么方法。

#抽象类加抽象方法就等于面向对象编程中的接口
from abc import ABCMeta,abstractmethod
 
class interface1(object):
    __metaclass__ = ABCMeta #指定这是一个抽象类
    @abstractmethod  #抽象方法
    def Lee(self):
        pass
    def Marlon(self):
        pass
class RelalizeInterfaceLee(interface1):#必须实现interface中的所有函数,否则运行会报错
    def __init__(self):    
        print '这是接口interface的实现'
    def Lee(self):
        print '实现Lee功能'        
    def Marlon(self):
        pass   
class RelalizeInterfaceMarlon(interface1): #必须实现interface中的所有函数,否则运行会报错
    def __init__(self):    
        print '这是接口interface的实现'
    def Lee(self):
        pass      
    def Marlon(self):
        print "实现Marlon功能"

四 其他技巧知识

字节的换算Tips:

1)bit(比特)

比特作为信息技术的最基本存储单位,非常小,但大名鼎鼎的比特币就是以此命名的,它的简写为小写字母“b”。

同学们都知道,计算机是以二进制存储数据的,二进制的一位,就叫做 1 比特,也就是说,比特要么为 0 要么为 1。

2)Byte(字节)

通常来说,一个英文字符是一个字节,一个中文字符是两个字节。字节与比特的换算关系是:1 字节 = 8 比特。

在往上的单位就是 KB,并不是 1000 字节,因为计算机只认识二进制,因此是 2 的 10 次方,也就是 1024 个字节。(终于知道 1024 和程序员的关系了吧?)
Java与Python常见语法对比及区别_第1张图片

python中的is 关键字

小黄最近手头非常宽裕,花重金购买了一辆 P90D 特斯拉,我们暂且给这车取名叫 “小P” ,这辆车和隔壁老王家的车(车名叫 “小 王”)是一模一样的,无论是型号、外表还是价格都一样,是同批次生产的。这里我们可以说 “小P” 和"小王"是两辆一模一样的、相等的(euqal),但本质上这是两个不同的对象。有一天小君给他的爱车又取了一个网名叫 “爱驹”,当我们说 “小P” 的时候其实就是在讨论 “爱驹”,因为本质上两个名字指的是同一个对象,这里我们把 “小P” 和 “爱驹” 称为完全相等的(identical)。

在 Python 中,”==” 和 “is” 的区别可类比这个例子 ,前者是相等性比较,比较的是两个对象中的值是否相等,后者是一致性比较,比较的是两个对象的内存空间地址是否相同。

​显然,如果内存地址相同,那么他们的值肯定也是一样的,因此,如果 “is” 返回 True,那么 “==” 一定也返回 True,反之却不成立。
————————————————
版权声明:本文为CSDN博主「豆几宝」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_30575925/article/details/113649379

四、参考文献

https://www.codenong.com/cs105425560/
https://www.iteye.com/blog/xflykkk-1337444
https://www.lmlphp.com/user/58370/article/item/1674566/
https://blog.csdn.net/qing_gee/article/details/104388158/

你可能感兴趣的:(Java,Web,pythonic技术汇总,java,python,开发语言,区别,对比)