美文网首页
编码之JVM之外与之内

编码之JVM之外与之内

作者: 逗比喵喵 | 来源:发表于2019-10-06 23:30 被阅读0次

JVM之外

在 JVM 之外, .java 文件可以采用多种编码格式:

  • UTF-8 - unix linux 默认
  • GBK - 中文 windows 平台默认

当将源码用 Javac 编译的时候, 默认是按照系统默认的编码格式读取 Java 源文件,
然后以 UTF-8 的格式输出到 .class 字节码文件中
.

换句话说:

  • 默认情况下在 Unix 平台, Javac 用 UTF-8 格式读取源文件然后以 UTF-8 格式写 .class
  • 默认情况下在中文 windows 平台, Javac 用 GBK 格式读取源文件然后同样以 UTF-8 格式写 .class

JVM之内

当运行代码时, 读入到内存里的字符(char)或字符串(String), 实质上都是用 char 来表示的(String 实质是 char[]), 而 char 是采用 UTF-16 来编码的.

但需要注意, char 永远是 2 个字节. 但对于超过 2 个字节的 UTF-16 编码的字符来说. 需要多个 char 来表示. 比如 emoji 表情. 比如某些 APP 输入框输入表情占用了 2 个字符. 就是字符串长度不等于字符长度的问题!

String a = new String(new byte[]{(byte)0xF3, (byte)0x3F, (byte)0xF2, (byte)0x2F});
System.out.println(a);
System.out.println(a.toCharArray().length); // 输出 2

输出 2, 也就是 2 个 char 即 4 个字节.

总结

  • JVM 外部, Javac 默认是按照系统默认的编码格式读取 Java 源文件, 但是统一按 UTF-8 编译 .class 字节码文件.
  • JVM 内部采用 UTF-16 编码

相关文章

  • 编码之JVM之外与之内

    JVM之外 在 JVM 之外, .java 文件可以采用多种编码格式: UTF-8 - unix linux 默认...

  • JVM

    JVM之内存模型JVM之对象定位与访问JVM之Java垃圾回收机制JVM之类加载

  • 考场之内与考场之外

    人生要么拥有梦想,要么拥有爱好。否则人生会如何的黯淡无光。 如若不是三十而立的恐惧,我想我也不会逼着媳妇去考什么事...

  • 星空之内与星空之外

    墨记·日歌(壹仟零陆拾贰·2021.11.30) · 星空之内与星空之外 文/叶潇(湖北) · 1 面对如此安宁纯...

  • 深夜,我在想你

    灯光散落 树之上,树之下 人影婆娑 光之南,光之北 所谓伊人 梦之内,梦之外 一个梦 在醒与不醒之间 锁锈了 钥匙...

  • 小问题及解决方案

    修改jvm的默认编码 JVM的默认编码,如果没有设置的话是根据系统来的,中文系统的话默认的编码一般是GBK,如果没...

  • “楚门世界”之内与之外

    电影《楚门的世界》讲述了楚门是一档热门肥皂剧的主人公,他身边的所有事情都是虚假的,他的亲人和朋友全都...

  • JVM之内存

    1、JVM内存区域 方法区 堆 虚拟机栈 本地方法栈 程序计数器 方法区 堆   所有线程共享所有对象实例及数组都...

  • jvm监控与调优之jdk命令行工具

    jvm监控与调优之jdk命令行工具 目录 jvm监控与调优之jdk命令行工具jvm的参数类型标准参数X参数XX参数...

  • 《道》

    何为道? 法为道。 道之与五蕴之外,道为空、为实。 法之与五蕴之内,法为色、为象。 空色一体, 实象一如。 内外合...

网友评论

      本文标题:编码之JVM之外与之内

      本文链接:https://www.haomeiwen.com/subject/tmyppctx.html