Dov*_*Dov 2 java string performance immutability
Java 有 StringBuilder 用于生成不断增长的字符串,但不幸的是,大多数 API 使用 String,因此一切都需要转换,并伴随着复制开销。
在编译器上,假设有一个 char 数组。是否有任何类可以提供只读 StringView (如 C++17 string_view)?如果没有,我可以轻松地编写诸如类之类的内容,但问题是由于其他所有内容都处理字符串,因此会失去一些好处。这个想法是提供一些看起来像字符串的东西,其中构造函数只是:
StringView(char[] bigBuffer, int start, int len) {}
Run Code Online (Sandbox Code Playgroud)
并在任何需要使用字符串的地方使用该类。
有一个用于只读访问String类似数据的接口。它被称为CharSequence,并且该类String实现了这个接口。
与 C++ 等价的 JavaStringView是 a CharBuffer,它也实现CharSequence,因此任何接受 a 的方法都CharSequence可以使用 aString或 a CharBuffer(或 a StringBuilder)来调用。
许多Java API 已经接受CharSequence而不是,例如包中的String所有方法,以及Java 的正则表达式API。parse()java.time
CharBuffer要以与构造函数类似的方式创建StringView,您可以调用wrap():
CharBuffer.wrap\xe2\x80\x8b(char[] array, int offset, int length)\nRun Code Online (Sandbox Code Playgroud)\n\n\n新的缓冲区将由给定的 char 数组支持;也就是说,对缓冲区的修改将导致数组被修改,反之亦然。
\n
该 javadoc 显示没有进行任何复制。
\n