初学 Java ,请教大神们一个问题

2022-02-11 14:58:14 +08:00
 chur

rt.最近在看编码方面的文章,了解到 utf32 是定长编码,String.charAt 方法对此编码有更好的支持,于是写了段代码试了一下:


    long start = System.nanoTime();
    for (int i = 0; i < utf8.length(); i++) {
    	char c = utf8.charAt(i);
    }
    long end = System.nanoTime();
    System.out.println(end - start);

    start = System.nanoTime();
    for (int i = 0; i < utf32.length(); i++) {
    	char c = utf32.charAt(i);
    }
    end = System.nanoTime();
    System.out.println(end - start);
    System.out.println("==========");

将这段代码放入 for 循环中输出如下

5435600
3786200
==========
5370700
200
==========
....

手动复制代码片段执行输出如下:

7608200
5690900
==========
5709800
4930700
==========
...

放入 for 循环中执行的代码,从第二次循环开始 utf32 耗时在 0-500 纳秒浮动 是代码哪里写的有问题吗? utf8 和 utf32 两个 String 对象是同一段一亿个字符的文本

3445 次点击
所在节点    Java
24 条回复
bequt
2022-02-11 22:41:21 +08:00
已经开始学,rust 了
EscYezi
2022-02-13 04:26:09 +08:00
@txwd #2 src/main/java 是 maven 项目约定的源码位置,后面的 com/…是因为 java 包名通常是域名倒序,如 api.baidu.com 变成 com/baidu/api
Bingchunmoli
2022-02-13 12:34:12 +08:00
@txwd 你看一看现在前端也是 src public 什么的,都是规范的事情,你可以用,但是约定大于配置,都用规范,易懂,好用
chur
2022-02-14 13:41:52 +08:00
@maokabc 没太明白你的意思。String 如果没有显示指定字符集,默认是按系统默认字符集来的? java 内部存储字符使用的是 utf-16 编码,实际调用 getBytes 等方法时会有一个转码的过程

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/833213

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX