You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust中为何调用to_string时需在整数前加引用符号?

为什么拼接字符串时要给number.to_string()加&?

要搞懂这个问题,得先明白Rust里String类型的+运算符到底怎么工作的:

Rust为String实现的Add trait签名是这样的:

impl Add<&str> for String {
    type Output = String;
    fn add(self, rhs: &str) -> String;
}

简单说就是:只有String和&str类型才能用+拼接,而且+会取走左边String的所有权,把右边的&str内容追加进去,最后返回新的String。

回到你的代码:

  1. text.to_owned()把字符串字面量转成了String," "本身就是&str,所以text.to_owned() + " "完全符合要求,返回的还是String。
  2. number.to_string()会生成一个全新的String实例,不是&str。如果直接写+ number.to_string(),相当于尝试把String和String拼接,但Rust根本没提供这种Add实现,自然编译报错。
  3. 加&之后,&number.to_string()是对这个临时String取引用,得到&String。而Rust会自动把&String强制转成&str(因为String实现了Deref<Target=str>),这下就符合Add<&str>的要求了,所以能正常编译。

额外建议

对新手来说,用format!宏拼接字符串更直观,不用纠结所有权和引用的问题:

fn main() {
    let number = 42;
    let text = "The answer is";
    let result = format!("{} {}", text, number);
    println!("{}", result);
}

内容的提问来源于stack exchange,提问作者Pytai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 06:42:41