温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java String 为何要编码

发布时间:2026-10-26 14:38:07 来源:亿速云 阅读:91 作者:小樊 栏目:编程语言

在 Java 里经常听到“String 要编码 / 解码”,根本原因是:String 在内存中的形式和它在文件、网络、数据库里的形式不一样。


1. String 在 Java 内存里是什么?

Java 的 String 内部使用 char[] 存储,逻辑上是 UTF-16 编码的字符序列(JDK 9 之后内部优化为 byte[] + 编码标记,但对外仍是 Unicode 字符)。

String s = "你好";
// 内存中:Unicode 字符 '你' '好'

也就是说:

  • String = 字符(逻辑含义)
  • 不是字节(物理存储)

2. 为什么需要“编码”?

因为:

  • 文件是字节
  • 网络是字节
  • 数据库通常也是字节
  • 内存中的 String 是字符

字符 → 字节:编码(encode)
字节 → 字符:解码(decode)

// 编码
byte[] bytes = s.getBytes(StandardCharsets.UTF_8);

// 解码
String s2 = new String(bytes, StandardCharsets.UTF_8);

3. 如果不指定编码会怎样?

s.getBytes(); // 使用平台默认编码
new String(bytes); // 使用平台默认编码

问题:

  • Windows 可能是 GBK
  • Linux 可能是 UTF-8
  • 不同环境结果不同 → 乱码

✅ 所以:永远显式指定编码


4. 常见编码场景

文件读写

Files.write(path, s.getBytes(StandardCharsets.UTF_8));

网络传输(HTTP / Socket)

OutputStream os = socket.getOutputStream();
os.write(s.getBytes(StandardCharsets.UTF_8));

数据库

  • JDBC 通常自动处理
  • 但连接参数要指定:useUnicode=true&characterEncoding=UTF-8

5. 为什么 UTF-8 最常见?

  • 兼容 ASCII
  • 国际通用
  • 中文占用少(相比 UTF-16)
  • Web 标准

6. 一句话总结

Java String 要编码,是因为字符不能直接存储和传输,必须变成字节;编码就是字符和字节之间的“翻译规则”。

如果你愿意,我也可以讲:

  • UTF-8 / GBK / UTF-16 区别
  • 为什么会出现乱码
  • 实际项目中编码最佳实践
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手