Java程序员,一周Python入门:数据类型、变量、字符串和字符编码
Java程序员,一周Python入门:数据类型、变量、字符串和字符编码对比学习
Java 和 Python 在数据类型、变量管理、字符串处理等方面有很大的区别,下面进行详细对比。
1. 数据类型和变量
1.1 变量声明
语言 | 变量声明方式 | 类型检查 |
Java | 变量必须显式声明类型 | 静态类型,编译时检查 |
Python | 变量不需要声明类型,直接赋值 | 动态类型,运行时检查 |
示例
Java 变量声明
int a = 10; // 必须声明类型
double pi = 3.14;
boolean isTrue = true;
String name = "Java";
Python 变量声明
a = 10 # 变量可以直接赋值,不需要声明类型
pi = 3.14
is_true = True
name = "Python"
扩展:
pi = True 会怎么样?赶紧去敲一下,答案在最后。
总结:
- Java 是强类型语言,变量的类型在编译时就必须确定,不能随意更改。
- Python 是弱类型语言,变量类型可以动态变化,使用更灵活,但可能导致运行时错误。
1.2 数据类型对比
Java 和 Python 提供了一些相似的数据类型,但实现方式不同。
类别 | Java | Python |
整数 | int, long | int(可变长整数) |
浮点数 | float, double | float(双精度浮点数) |
布尔 | boolean | bool |
字符串 | String | str |
列表/数组 | Array, ArrayList | list |
集合 | HashSet, TreeSet | set |
映射(键值对) | HashMap, TreeMap | dict |
元组 | 无(可用 List.of() 创建不可变列表) | tuple |
2. 数字类型
2.1 整数
Java
int a = 100; // 32-bit 整数
long b = 10000000000L; // 64-bit 整数
Python
a = 100 # Python 的 int 可变长,自动扩展
b = 10000000000 # 不需要 long,int 可以存任意大小的数
b = 10_000_000_000 #对于比较大的数字,0数起来多麻烦,这样写也可以
b = 0xa1b2_c3d4 #16进制表示
区别:
- Java 区分 int 和 long,必须根据数值大小选择合适的类型。
- Python 整数是可变长的,可以存储任意大小的整数 - 这多节约空间,内存分配顺序分配性能最好,任意调整大小,那性能和内存碎片怎么解决??扩展思考!!
2.2 浮点数
Java
float x = 3.14f; // 32-bit 浮点数,必须加 f 后缀
double y = 3.1415926535; // 64-bit 浮点数
Python
x = 3.14 # Python 只有一种 float,默认是 64-bit
y = 3.1415926535
区别:
- Java 有 float(32 位)和 double(64 位),精度不同。
- Python 只有 float,默认 64 位,无需区分。
2.3 类型转换
Java
int a = 10;
double b = a; // int 自动转换为 double
int c = (int) b; // 需要强制转换,否则编译报错
int c = Integer.parseInt(b); //显示转换
Python
a = 10
b = float(a) # 显式转换
c = int(b) # 显式转换
区别:
- Java 不允许自动将 double 转换为 int,必须手动转换。
- Python 所有转换都是显式的,但类型变化更灵活。
3. 字符串和编码
3.1 字符串表示
语言 | 字符串类型 | 是否可变 |
Java | String | 不可变 |
Python | str | 不可变 |
Java
String s1 = "Hello";
String s2 = "World";
String s3 = s1 + " " + s2; // 字符串拼接
System.out.println(s3); // Hello World
Python
s1 = "Hello"
s2 = "World"
s3 = s1 + " " + s2 # 字符串拼接
print(s3) # Hello World
区别:
- Java 的 String 不可变,每次修改都会创建新的字符串对象。
- Python 的 str 也是不可变,但处理字符串更灵活。
3.2 多行字符串
Java
String text = "Hello\nWorld\nJava";
System.out.println(text);
Python
text = """Hello
World
Python"""
print(text)
区别:
- Python 可以使用 """ 定义多行字符串,Java 需要手动 \n,当然 java高版本同样支持"""。
3.3 字符串格式化
Java
String name = "Alice";
int age = 25;
String output = String.format("My name is %s and I am %d years old.", name, age);
System.out.println(output);
Python
name = "Alice"
age = 25
output = f"My name is {name} and I am {age} years old."
print(output)
区别:
- Java 使用 String.format() 或 printf() 进行格式化。
- Python 使用 f"" 格式化,更简洁。
3.4 字符编码
Java
- Java 默认使用 UTF-16 存储字符串。
- 读取文件时需指定编码:
import java.nio.file.*;
import java.nio.charset.*;
String content = Files.readString(Paths.get("file.txt"), StandardCharsets.UTF_8);
Python
- Python 默认使用 UTF-8 存储字符串。
- 读取文件时也可指定编码:
with open("file.txt", "r", encoding="utf-8") as f:
content = f.read()
-- 这里不懂没关系,理解能改指定编码即可。
区别:
- Java 默认 UTF-16,占用更多空间。
- Python 默认 UTF-8,更适合处理多语言文本。
4. bytes 类型
在 Java 和 Python 中,bytes 类型用于存储二进制数据,如文件内容、网络传输数据等。
4.1 bytes 类型定义
语言 | 类型 | 特性 |
Java | byte[] | 长度固定,不能直接打印,需要转换 |
Python | bytes | 长度固定,支持 b"" 方式创建 |
示例
Java
byte[] byteArray = {65, 66, 67}; // 存储ASCII值 65(A), 66(B), 67(C)
String str = new String(byteArray); // 直接转换为字符串
System.out.println(str); // 输出 "ABC"
Python
byte_array = bytes([65, 66, 67]) # 存储ASCII值
string = byte_array.decode("utf-8") # 转换为字符串
print(string) # 输出 "ABC"
4.2 bytes 与 str 互相转换
Java
String text = "Hello";
byte[] byteArray = text.getBytes(StandardCharsets.UTF_8); // 字符串 -> byte[]
String decoded = new String(byteArray,StandardCharsets.UTF_8); // byte[] -> 字符串
Python
text = "Hello"
byte_array = text.encode("utf-8") # str -> bytes
decoded = byte_array.decode("utf-8") # bytes -> str
区别:
- Java 需要使用 getBytes() 和 new String() 进行转换。
- Python 直接用 .encode() 和 .decode() 进行转换。
5. 字符串格式化
语言 | 格式化方法 | 示例 |
Java | String.format() | "Hello %s, age %d".formatted(name, age) |
Java | System.out.printf() | System.out.printf("Hello %s, age %d", name, age); |
Python | % 格式化 | "Hello %s, age %d" % (name, age) |
Python | .format() 方法 | "Hello {}, age {}".format(name, age) |
Python | f-string | f"Hello {name}, age {age}" |
示例
Java
String name = "Alice";
int age = 25;
String message = String.format("Hello %s, you are %d years old.", name, age);
System.out.println(message);
Python
name = "Alice"
age = 25
message = f"Hello {name}, you are {age} years old."
print(message)
区别:
- Java 主要使用 String.format(),也可以使用 printf()。
- Python 提供 f"" 格式化字符串,语法更简单直观。
6. 字符串常用函数
Java 和 Python 都提供丰富的字符串处理方法,下面进行对比:
6.1 长度计算
Java | Python |
"Hello".length() | len("Hello") |
示例
String s = "Hello";
System.out.println(s.length()); // 5
s = "Hello"
print(len(s)) # 5
6.2 字符串大小写转换
操作 | Java | Python |
转大写 | s.toUpperCase() | s.upper() |
转小写 | s.toLowerCase() | s.lower() |
首字母大写 | Character.toUpperCase(s.charAt(0)) + s.substring(1) | s.capitalize() |
示例
String s = "hello";
System.out.println(s.toUpperCase()); // "HELLO"
s = "hello"
print(s.upper()) # "HELLO"
6.3 字符串查找
操作 | Java | Python |
查找子串索引 | s.indexOf("lo") | s.find("lo") |
是否包含子串 | s.contains("lo") | "lo" in s |
以某字符开头 | s.startsWith("He") | s.startswith("He") |
以某字符结尾 | s.endsWith("lo") | s.endswith("lo") |
示例
String s = "Hello";
System.out.println(s.indexOf("lo")); // 3
System.out.println(s.contains("He")); // true
s = "Hello"
print(s.find("lo")) # 3
print("He" in s) # True
6.4 字符串替换
Java | Python |
s.replace("l", "x") | s.replace("l", "x") |
String s = "Hello";
System.out.println(s.replace("l", "x")); // "Hexxo"
s = "Hello"
print(s.replace("l", "x")) # "Hexxo"
6.5 字符串拆分和拼接
操作 | Java | Python |
按空格拆分 | s.split(" ") | s.split(" ") |
按换行拆分 | s.split("\n") | s.splitlines() |
用 , 连接列表 | String.join(",", list) | ",".join(list) |
示例
String s = "Hello World";
String[] parts = s.split(" ");
System.out.println(parts[0]); // "Hello"
s = "Hello World"
parts = s.split(" ")
print(parts[0]) # "Hello"
7. 总结
总结
特性 | Java | Python |
变量类型 | 需要显式声明 | 自动推断类型 |
整数类型 | int 和 long | int(可变长) |
浮点数 | float(32-bit), double(64-bit) | float(64-bit) |
字符串 | String,不可变 | str,不可变 |
字符串拼接 | + 或 StringBuilder | + 或 f"" |
字节类型 | byte | bytes |
编码 | 默认 UTF-16 | 默认 UTF-8 |
通过Java对比学习Python是不是特别简单。有不对或者漏掉的欢迎指正。
实战结果: