Rust中String和str的区别是什么?
你好!我刚开始学习Rust,遇到了`String`和`str`的混淆。在其他语言中,比如Python或JavaScript,字符串就是字符串,但这里却有些复杂。
我写了这样的代码:
```rust
fn main() {
let greeting = "Hello"; // 这是str吗?
let name = String::from("World"); // 这是String吗?
println!("{} {}", greeting, name);
// 尝试修改greeting
// greeting.push_str("!"); // 错误!
// 而name可以修改
name.push_str("!"); // 可以工作
println!("{}", name);
}
```
我明白`String`是可变的,而`str`不可变。但为什么?什么时候该用哪种类型?还有`&str`是什么?我看到函数中经常写`&str`,但不理解为什么。
我还注意到,`str`在编译时大小未知,而`String`大小已知。这是否与字符串存储在堆上有关?请帮我理清思路,我快想破头了。
<<>>