Python转Java系列:语法与类型系统

文章目录

  • [第 2 章:语法与类型系统](#第 2 章:语法与类型系统)
    • [Python 对照表](#Python 对照表)
    • [2.1 基本类型](#2.1 基本类型)
    • [2.2 类型转换](#2.2 类型转换)
    • [2.3 字符串](#2.3 字符串)
    • [2.4 数组 vs 列表](#2.4 数组 vs 列表)
    • [2.5 `var` 局部类型推断(Java 10+)](#2.5 var 局部类型推断(Java 10+))
    • [2.6 常量](#2.6 常量)
    • [2.7 运算符](#2.7 运算符)
    • [2.8 枚举](#2.8 枚举)
    • 本章小结
    • 练习题

第 2 章:语法与类型系统

Python 对照表

Python Java
动态类型 静态类型,变量类型在编译期确定
int, float, str, bool int, double, String, boolean
None null(引用类型)
x: int = 1(类型提示) int x = 1;(强制)
char 独立使用 char 单字符,String 字符串
一切皆对象(含 int 基本类型 + 包装类 Integer

2.1 基本类型

Python:

python 复制代码
age = 25
price = 19.99
name = "Alice"
active = True
nothing = None

Java:

java 复制代码
int age = 25;
double price = 19.99;
String name = "Alice";
boolean active = true;
String nothing = null;  // 引用类型才能为 null
Java 基本类型 字节 Python 近似 包装类
byte 1 无直接对应 Byte
short 2 - Short
int 4 int Integer
long 8 任意精度需 int 对象 Long
float 4 float Float
double 8 float Double
boolean - bool Boolean
char 2 单字符 str Character

⚠️ 常见坑int 等基本类型不能为 null;需要可空时用 Integer

2.2 类型转换

Python:

python 复制代码
n = int("42")
s = str(42)

Java:

java 复制代码
int n = Integer.parseInt("42");
String s = String.valueOf(42);
// 或
String s2 = Integer.toString(42);

2.3 字符串

Python:

python 复制代码
msg = f"User {name} has {count} items"
lines = """line1
line2"""

Java:

java 复制代码
String msg = String.format("User %s has %d items", name, count);
// Java 15+
String lines = """
    line1
    line2
    """;
操作 Python Java
长度 len(s) s.length()
子串 s[1:4] s.substring(1, 4)
包含 "ab" in s s.contains("ab")
分割 s.split(",") s.split(",")
去空白 s.strip() s.strip()(Java 11+)
不可变

2.4 数组 vs 列表

Python(列表):

python 复制代码
nums = [1, 2, 3]
nums.append(4)

Java(定长数组):

java 复制代码
int[] nums = {1, 2, 3};
int[] nums2 = new int[3];
nums2[0] = 1;
// 数组长度固定,增删用 ArrayList(第 6 章)

💼 面试点 :数组是对象,存在堆上;int[] 存基本类型,Integer[] 存对象。

2.5 var 局部类型推断(Java 10+)

类似 Python 的直觉,但仅限局部变量且必须有初始化:

java 复制代码
var list = new ArrayList<String>();  // 推断为 ArrayList<String>
var name = "Alice";                   // 推断为 String
// var x;  // 编译错误:无法推断

2.6 常量

Python:

python 复制代码
MAX_SIZE = 100  # 约定,非强制

Java:

java 复制代码
final int MAX_SIZE = 100;
static final double PI = 3.14159;

final 表示引用不可重新赋值(对象内容仍可能可变,如 List)。

2.7 运算符

大部分与 Python 相同。差异:

场景 Python Java
整除 7 // 2 → 3 7 / 2 → 3(两 int 相除)
真除 7 / 2 → 3.5 7.0 / 2 → 3.5
逻辑与或 and / or && / `
not x !x
三元 a if cond else b cond ? a : b
java 复制代码
int a = 7 / 2;      // 3
double b = 7 / 2.0; // 3.5
String r = score >= 60 ? "pass" : "fail";

2.8 枚举

Python 3.4+ 有 Enum,Java 枚举更常用且功能更强:

Python:

python 复制代码
from enum import Enum

class Status(Enum):
  PENDING = "pending"
  DONE = "done"

Java:

java 复制代码
public enum Status {
    PENDING("pending"),
    DONE("done");

    private final String label;

    Status(String label) {
        this.label = label;
    }

    public String getLabel() {
        return label;
    }
}

使用:Status.PENDING,可用在 switch 中(第 3 章)。


本章小结

  • Java 必须声明类型;null 只用于引用类型
  • 字符串不可变,方法名与 Python 不同(length() 不是 len()
  • 定长数组用 [],动态集合用 ArrayList
  • final 声明常量;枚举是企业代码常见写法

练习题

  1. 将 Python 代码 total = float(input_str) * quantity 改写为 Java(input_strStringquantityint)。
  2. 写 Java 代码判断字符串是否为回文(忽略大小写)。
  3. enum 定义星期 DayOfWeek,含 MONDAYSUNDAY
  4. 解释 intInteger 的区别及自动装箱(autoboxing)是什么。
相关推荐
我是一颗柠檬几秒前
【Java项目技术亮点】覆盖索引与索引下推优化
android·java·开发语言
云道轩2 分钟前
比较IBM Transformation Advisor 和WebSphere Application Server Migration Toolkit
java·jakarta ee·open liberty·应用迁移
tuddy78946410 分钟前
Codex++ 安全边界探秘:从模型能力到风险防御
人工智能·python·安全
2601_9624408412 分钟前
计算机毕业设计之健身房管理系统的设计与实现
java·开发语言·课程设计·旅游·宠物
TeamDev13 分钟前
JxBrowser 9.3.0 版本发布啦!
java·后端·c#·混合应用·jxbrowser·浏览器控件·异步媒体设备
深盾科技_Virbox18 分钟前
深盾科技·Virbox产品体系全景解读:软件安全如何从加密锁走向全生命周期
java·大数据·算法·安全·软件需求
豆瓣鸡19 分钟前
Knife4j 接口文档
java
格子软件24 分钟前
2026年GEO优化系统源码的分布式状态机深度拆解
java·前端·vue.js·vue·geo
C++、Java和Python的菜鸟27 分钟前
第1章 集合高级
java·jvm·python
旖-旎33 分钟前
QT系统篇(5)(下)
开发语言·c++·qt