目录
前言
基于java jdk8 和pyhon3的横向对比。jdk8来自于本人浅薄的使用经验。python3在git上找到了一本教程《Python-100-Days》作者骆昊。重点记录教程里面的一些代码与我在使用java中的语法差异,做一个关联记忆。
语法对比
python运算符 | java运算符 | 描述 |
| []、subList.... | 索引、切片 |
|
| 幂 |
| ~、+、- | 按位取反、正号、负号 |
| *、/、%、/ | 乘、除、模、整除 |
| +、- | 加、减 |
| >>、<< | 右移、左移 |
| & | 按位与 |
| ^、| | 按位异或,按位或 |
|
| 小于等于、小于、大于、大于等于 |
|
| 等于、不等于 |
| equals、!equals | 身份运算符 |
|
| 成员运算符 |
| !、||、&& | 逻辑运算符 |
|
| 赋值运算符 |
差异化比较
索引、切片
python
##索引符号
my_list = [1, 2, 3, 4] # 定义一个列表
print(my_list[0]) # 输出: 1(第一个元素)
print(my_list[-1]) # 输出: 4(最后一个元素,负数表示倒数)
my_list[1] = 99 # 将第二个元素改为 99
print(my_list) # 输出: [1, 99, 3, 4]
##切片符号
new_list = my_list[:] # 生成一个与原列表独立的新列表
print(my_list[1:3]) # 输出: [99, 3](索引 1 到 2 的元素)
print(my_list[:2]) # 输出: [1, 99](从开头到索引 1)
print(my_list[::2]) # 输出: [1, 3](步长为 2,隔一个取一个)
print(my_list[::-1]) # 输出: [4, 3, 99, 1](逆序列表)
java
List<String> list = new ArrayList<>();
list.add("1");
list.add("2");
System.out.println(list.get(0)); // 输出: 1(第一个元素)
System.out.println(list.subList(0,1));//输出一个子集,浅拷贝
说明:
java中没有直接支持的索引、切片符号,但是相类似的二者都是对一个集合的操作,通过方法可以实现于python符号相对应的功能。这边以集合list举例比较。python的切片功能属于深拷贝,java举例的截取功能属于浅拷贝即截取的子集不是重新生成的对象而是引用同一个对象。但是本人未验证python中该论点,只是书上这么说。java中倒是通过代码验证了一下。
幂
求幂是数学中的基础公式,这边不额外展示代码,只是java中没有提供基础符号而是通过方法实现,python倒是有基础符号直接使用。
乘、除、模、整除
python
a = 2.5
b=2
print(a//b) ##整除 输出1.0
print(a/b) ##除法 输出1.25
a=3
b=2
print(a//b) ##整除 输出1
print(a/b) ##除法 输出1.5
java
//除法
double i1 = 3;
int i2 = 2;
System.out.println(i1/i2); //输出1.5
int i1 = 3;
int i2 = 2;
System.out.println(i1/i2); //输出1
说明
python中对对象类型校验比较宽松,因此整除和除法的区别是整除输出整数部分舍去余数部分,不说舍去小数部分是因为如果除数或者被除数是浮点型,得到的商是xxxx.0的浮点数整数。
java中两个对象运算,商的类型会自动转换成高精度的数值类型,因此如果是整型相除,得到的值就是舍去余数部分的整数值。如果包含浮点型数值参与运算,其商则是完整的整数小数值。因此java中也没有专门一个符号来区分整除或者除法
按位与;按位异或,按位或
本来偷懒问了deepseek,这三个操作符的区别,deepseek告诉我java中这三个符号不支持boolean类型运算,python中支持,后面本地测试了一下发现java中也支持。这符号平时使用也比较少感觉算法侧的使用比较多一点,因为按位运算会比实际的加减乘除更快点,但是本人还没到那个领域没有做过多深入研究。
第二个是说python中支持部分集合的操作比如下面示例代码
set1 = {1, 2, 3}
set2 = {3, 4, 5}
print(set1 & set2) # 交集: {3}
print(set1 | set2) # 并集: {1, 2, 3, 4, 5}
print(set1 ^ set2) # 对称差集: {1, 2, 4, 5}
而java中只支持基础数据类型,感觉还是在二者语法宽松上的差异
身份运算符;成员运算符;逻辑运算符
写到这边突然觉得这个也不算是语法的差异只不过是java已另一种方式呈现,但是为了方便记忆还是简单提一句
小结
符号运算这块感觉区别上还是属于语法对类型校验的宽松程度上,由于python语法比较宽松,因此大部分操作场景上会显得比较“方便”不需要考虑太多,而java可能要多考虑一些。这和本人一开始学习java时候老师提到的java和c语言还是c++的差异,是在于内存上的管理,而由于c语言、c++本人只是学校学习过没有深入使用,因此对这块内存管理并没有太多的感觉。python现在只是刚开始,可能后面深入学习后能深刻体验到这种“便捷性”吧。