Java 字符串与字符数组
!!有关编码的问题可以看上一篇关于编码的文章!!
1. java 涉及到的编码
-
java 文件编码格式
java 的文件编码格式主要是分为两个部分, 一个将文件保存为二进制文件的编码方式, 另一个是从二进制文件解码的方式, 你也可以理解为[硬盘]上的编码方式. 所谓的乱码的产生原因都是因为编码的方式和解码的方式不一致导致的, 一般在同一个集成开发环境(Integrated development environment IDE), 不会出现乱码的问题, 因为同一个IDE肯定是用同样的编码方式编码和解码. 如果是idea的话, 一般都是默认 UTF-8 的编码格式, IDE 也不会傻里傻气让你同时设置编码格式和解码格式. 出现乱码的时候一般是在代码移植, 网络传输的过程中. 还有一些情况, 例如你在notepad ++ 上写了一个简单的java程序, 是用 UTF-8 编码的, 然后你用命令javac 来编译, 而操作系统的默认编码格式是GB2312. 然后产生了乱码问题. -
java 虚拟机(JVM) 的编码方式
java的虚拟机,仔细体会虚拟机这个概念. java运行在虚拟机上, 所以他也会有编码的问题, 这里的编码指的是, 代码中的字符串的编码方式, 因为在程序的运行过程中, 程序中的字符串, 字符是需要保存在内存中的, 你也可以理解为[内存]中的编码方式. java 的非常重要的特点就是跨平台, 所以java虚拟机内的编码方式都是固定的, 都是 UTF-16 编码. 至于为什么没有采用现在最流行, 使用最为广泛的 UTF-8 编码, 我也感到很疑惑, 后来, 在知乎上看到这条回答应该是比较靠谱的
然后也查证了一下 java14 的String类, 是由一个 byte[] 数组和一个 byte 类型的 coder 组成的 coder的含义就是编码方式, 如题主所说, 只有在 Latin1 无法表示显示内容的时候才会使用双字节储存字符, 而java8 的String类,则是由一个char[] 数组组成的.