Avatar ·

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`大小已知。这是否与字符串存储在堆上有关?请帮我理清思路,我快想破头了。 <<>>

关键区别:所有权