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是不是特别简单。有不对或者漏掉的欢迎指正。

实战结果:


相关文章

Java 中的8种基本数据类型

Java 中有 8 种基本数据类型,分别为:6 种数字类型:4 种整数型:byte、short、int、long2 种浮点型:float、double1 种字符类型:char1 种布尔型:boolea...

java基本数据类型

前言前两节对java做了一个简单的介绍以及java环境的安装,那么本节就算是基本进入到java编程的正式学习,在进行学习java编程之前我首先要认识一下java里面有哪几种数据类型。四类八种Java的...

java float精度引发的问题

最近做地图相关的项目,因为使用float导致精度损失的问题回顾:根据百度地图api标注的经纬度返回类型为float,所以字段类型也定义为float// 百度地图api返回值 {"status":0,"...

JAVA中的浮点数与二进制

先来看一段简单的代码public static void main(String[] args) { System.out.println(0.1+0.2); }打印结果如下:0.30...

Java泛型全方位剖析:从入门到精通的完整指南(上篇)

Java泛型全方位剖析:从入门到精通的完整指南第一部分:引言与基础概念Java泛型是Java 5引入的重要特性,它允许类、接口和方法在定义时使用类型参数,提高了代码的类型安全性和可读性。本文将全面解析...

聊聊Java中浮点丢失精度的事

在说这个之前,我们先看看十进制到二进制的转换过程整数的十进制到二进制的转换过程用白话说这个过程就是不断的除2,得到商继续除,直到商小于1为止,然后他每次结果的余数倒着排列出来就是它的二进制结果了,直接...