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