|
|
@ -394,7 +394,7 @@ string_replace_range = "I like Rust!"
|
|
|
|
|
|
|
|
|
|
|
|
#### 删除 (Delete)
|
|
|
|
#### 删除 (Delete)
|
|
|
|
|
|
|
|
|
|
|
|
与字符串删除相关的方法有 4 个,他们分别是 `pop()`,`remove()`,`truncate()`,`clear()`。这四个方法仅适用于 `String` 类型。
|
|
|
|
与字符串删除相关的方法有 4 个,它们分别是 `pop()`,`remove()`,`truncate()`,`clear()`。这四个方法仅适用于 `String` 类型。
|
|
|
|
|
|
|
|
|
|
|
|
1、 `pop` —— 删除并返回字符串的最后一个字符
|
|
|
|
1、 `pop` —— 删除并返回字符串的最后一个字符
|
|
|
|
|
|
|
|
|
|
|
@ -683,7 +683,7 @@ for b in "中国人".bytes() {
|
|
|
|
|
|
|
|
|
|
|
|
那么问题来了,为啥 `String` 可变,而字符串字面值 `str` 却不可以?
|
|
|
|
那么问题来了,为啥 `String` 可变,而字符串字面值 `str` 却不可以?
|
|
|
|
|
|
|
|
|
|
|
|
就字符串字面值来说,我们在编译时就知道其内容,最终字面值文本被直接硬编码进可执行文件中,这使得字符串字面值快速且高效,这主要得益于字符串字面值的不可变性。不幸的是,我们不能为了获得这种性能,而把每一个在编译时大小未知的文本都放进内存中(你也做不到!),因为有的字符串是在程序运行得过程中动态生成的。
|
|
|
|
就字符串字面值来说,我们在编译时就知道其内容,最终字面值文本被直接硬编码进可执行文件中,这使得字符串字面值快速且高效,这主要得益于字符串字面值的不可变性。不幸的是,我们不能为了获得这种性能,而把每一个在编译时大小未知的文本都放进内存中(你也做不到!),因为有的字符串是在程序运行的过程中动态生成的。
|
|
|
|
|
|
|
|
|
|
|
|
对于 `String` 类型,为了支持一个可变、可增长的文本片段,需要在堆上分配一块在编译时未知大小的内存来存放内容,这些都是在程序运行时完成的:
|
|
|
|
对于 `String` 类型,为了支持一个可变、可增长的文本片段,需要在堆上分配一块在编译时未知大小的内存来存放内容,这些都是在程序运行时完成的:
|
|
|
|
|
|
|
|
|
|
|
|