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

news2025/2/24 6:34:02

这里写目录标题

  • 一、前记
    • 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整体对比

类型JavaPython
变量类型静态类型。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的基本数据类型相近,因此,沿用。

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

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

3.2其他数据结构

数据结构JavaPython
字符串String s = “XXX”s = “XXX”
静态数组T[] dirs = new T[5] [0]*5
动态数组ArrayList[]
链表LinkedListN/A
OrderedSetTreeSetN/A
OrderedMapTreeMapN/A
HashSetHashSetset()
HashMapHashMapdict()
PriorityQueue[]/heapq.*
队列Queuecollections.deque()
双端队列Dequecollections.deque()
Stack[]/collections.deque()

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

3.3 String的处理方法

字符串方法JavaPython
字符串String s = “XXX”s = “XXX”
创建字符串String s = “XXX”s = “XXX”
将指定的子串str1替换为目标子串str2s.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数组

数组方法JavaPython
创建静态数组(字面量)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 和程序员的关系了吧?)
在这里插入图片描述

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/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/134895.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

flutter项目编译问题汇总

1、kotlin compiler embeddable下载慢的解决办法 备注&#xff1a;可以使用https://developer.aliyun.com/mvn/search这个链接搜索并下载 2、运行Flutter项目一直卡在--Running Gradle task assembleDebug 解决方法&#xff1a; 第一步&#xff1a;修改flutter安装目录/pac…

校招前端一面经典react面试题(附答案)

React.forwardRef是什么&#xff1f;它有什么作用&#xff1f; React.forwardRef 会创建一个React组件&#xff0c;这个组件能够将其接受的 ref 属性转发到其组件树下的另一个组件中。这种技术并不常见&#xff0c;但在以下两种场景中特别有用&#xff1a; 转发 refs 到 DOM …

多层次目录结构的CMake工程管理

多层次目录结构的CMake工程管理一、多层次目录结构的文件结构二、如何利用CMake组织多层次目录结构三、构建工程一、多层次目录结构的文件结构 我们编写程序&#xff0c;不可能把所有源文件都一股脑地放在顶层目录下&#xff0c;必然会有一个目录结构&#xff0c;每个目录中只…

【django】项目开发准备之数据库配置

文章目录一、docker中启动mariadb服务二、django配置文件中进行配置1.安装mysqlclient2.找到settings.py文件3.启动django程序一、docker中启动mariadb服务 --restartalways:自动启动容器 --name mydb&#xff1a;容器名称 -d&#xff1a;后台运行容器 -v /home/ubuntu/ck14/ma…

php宝塔搭建部署实战服务类家政钟点工保姆网站源码

大家好啊&#xff0c;我是测评君&#xff0c;欢迎来到web测评。 本期给大家带来一套php开发的服务类家政钟点工保姆网站源码&#xff0c;感兴趣的朋友可以自行下载学习。 技术架构 PHP7.2 nginx mysql5.7 JS CSS HTMLcnetos7以上 宝塔面板 文字搭建教程 下载源码&…

单机模拟搭建 Zookeeper 集群

1. 准备 官网下载&#xff1a;https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.6.3/apache-zookeeper-3.6.3-bin.tar.gz 注意&#xff1a; zookeeper 从 3.5 版本以后&#xff0c;命名就发生了改变apache-zookeeper-X.X.X.tar.gz 这样命名的&#xff0c;都是未…

并发编程之JMMvolatile详解

目录 什么是JMM模型 定义 JMM不同于JVM内存区域模型 主内存 工作内存 Java内存模型与硬件内存架构的关系 JMM存在的必要性 数据同步八大原子操作 同步规则分析 并发编程的可见性&#xff0c;原子性与有序性问题 原子性 可见性 有序性 JMM如何解决原子性&…

【单片机】AT24C02存储器(I²C总线)/DS18B20温度传感器(单总线)

目录 一、AT24C02存储器 1、AT24C02存储器介绍 2、存储器简化模型 3、AT24C02存储器原理图 二、IC总线 1、IC总线的介绍 2、IC电路 3、IC时序图 3.1IC开始和结束时序图 3.2IC主机发送和接收时序图 3.3IC主机发送应答/接收应答 4、IC数据帧发送/接收方式 4.1主机向…

数据可视化系列-02各类图表的综合使用介绍及实践-上篇

文章目录3.各类图表的综合使用介绍及实践3.1了解数据功能图1、可视化中的数据2、基于数据的研究3、数据的可视化组件4、可视化图表的作用、制作流程和类型3.2北极星指标展示1、指标类知识回顾&#xff1a;指标类简介、指标类主要场景2、指标类图表&#xff1a;指标看板、指标趋…

C++关联容器(复习题篇)

本篇博客将介绍标准库关联容器&#xff0c;包括&#xff1a; 关联容器的概念和简单的使用关联容器涉及的类型和操作&#xff0c;特别是与顺序容器的差异无序关联容器&#xff0c;特别是与有序关联容器的差异 练习1.1 描述map和vector的不同 vector是顺序容器其中的元素是“顺序…

分布式事务的介绍

本地事务 单服务进程&#xff0c;单数据库资源,同一个连接conn多个事务操作 在JDBC编程中&#xff0c;我们通过java.sql.Connection对象来开启、关闭或者提交事务。代码如下所示&#xff1a; Connection conn ... //获取数据库连接 conn.setAutoCommit(false); //开启事务 t…

educoder数据结构与算法 栈 第2关:实现一个链接存储的栈

本文已收录于专栏 &#x1f332;《educoder数据结构与算法_大耳朵宋宋的博客-CSDN博客》&#x1f332; 目录 任务描述 相关知识 编程要求 测试说明 AC_Code 任务描述 本关任务是实现 step2/LnkStack.cpp 中的LS_IsEmpty、LS_Length、LS_Push、LS_Pop和LS_Top五个操作函数…

π122E30兼容Si8622BC-B-IS 双通道数字隔离器

π122E30兼容Si8622BC-B-IS 双通道数字隔离器 &#xff0c;具有出色的性能特征和可靠性&#xff0c;整体性能优于光耦和基于其他原理的数字隔离器产品。 产品传输通道间彼此独立&#xff0c;可实现多种传输方向的配置&#xff0c;可实现 3.0kVrms 隔离耐压等级和 DC 到 200Mbp…

Day 17-Vue3 技术_其它

1.全局API的转移 Vue 2.x 有许多全局 API 和配置。例如&#xff1a;注册全局组件、注册全局指令等。 //注册全局组件 Vue.component(MyButton, {data: () > ({count: 0}),template: <button click"count">Clicked {{ count }} times.</button> })//注…

acwing-1015 摘花生

项目场景&#xff1a; 线性dp 题源 数字三角形 问题描述 Hello Kitty想摘点花生送给她喜欢的米老鼠。 她来到一片有网格状道路的矩形花生地(如下图)&#xff0c;从西北角进去&#xff0c;东南角出来。 地里每个道路的交叉点上都有种着一株花生苗&#xff0c;上面有若干颗花…

用Typora,PicGo和OSS实现自动上传图片

前言&#xff1a; 以前写博客要发布到好些个平台&#xff0c;我是将图片一张张上传到每个平台&#xff0c;后来发现是真的麻烦&#xff0c;上传图片花的时间太多&#xff0c;极大的降低了我写文章的积极性。 后来改进为使用oss&#xff0c;把博客的图片都上传到oss上面。然后…

JAVA : ArrayList和数组的转换

一、ArrayList转换为数组 ArrayList提供public T[] toArray(T[] a)方法返回一个按照正确的顺序包含此列表中所有元素的数组&#xff0c;返回数组的运行时类型就是指定数组的运行时类型。 import java.util.ArrayList; import java.util.List; public class Test { public st…

戴尔笔记本电脑重装系统后进不了系统怎么办

​戴尔电脑是一款很棒的电脑品牌&#xff0c;不少小伙伴都在使用这个牌子的电脑。但有不少小伙伴在重装完系统之后却进不去&#xff0c;那么碰到这种情况应该怎么办呢&#xff1f;下面就和小编一起来看看戴尔笔记本电脑重装系统后进不了系统怎么办的吧。 工具/原料&#xff1a…

【设计模式】-创造篇-工厂方法

制造业是一个国家工业经济发展的重要支柱&#xff0c;而工厂则是其根基所在。程序设计中的工厂类往往是对对象构造、实例化、初始化过程的封装&#xff0c;而工厂方法(Factory Method)则可以升华为一种设计模式&#xff0c;它对工厂制造方法进行接口规范化&#xff0c;以允许子…

Vector - VT System - 板卡_VT7001

接上篇我们介绍完了背板VT8006和VT8012&#xff0c;今天我们来介绍下电源模块板卡VT7001&#xff0c;这个板卡是我们在不需要程控电源的时候依然能够实现精细化的电压、电流控制及检查的板卡&#xff0c;并且在脚本开发中无需考虑时延的一个模块。我们使用的大部分设备无论是继…