Jay*_*ibe 0 string slice rust borrow-checker
我目前正在尝试了解 Rust 中 &str、str 和 String 之间的区别。我对编程语言非常陌生,并且已经对此感到困惑了一段时间。我知道 String 有一个长度和指针存储在堆栈中,并且该指针指向堆上的一些数据,其中包含字符串数据。我还知道它存储在堆上,因为我们不知道它的字符串数据在运行时会占用多少内存,因此它不能存储在堆栈中。对于 str,我理解它是一个硬编码的二进制值,这意味着它必须是不可变的,而且我们可以得到它的唯一方法是使用引用:&str。如果 &str 必须是不可变的。那么为什么下面的代码不会导致编译器错误呢?请帮忙。
let mut s: &str = "foo";
s = "foobar";
Run Code Online (Sandbox Code Playgroud)
在str本身是不可变的,但是&str是一个字符串的引用。当你这样做时,s = "foobar"你正在s指向一个不同的字符串。这是一个应该有希望说明这个的例子...... rust playground。
fn main() {
let mut s: &str = "foo";
let p = s;
s = "foobar";
println!("{:?}", p);
println!("{:?}", s);
}
Run Code Online (Sandbox Code Playgroud)