文章目录
- Rust "xxx".to_string()和Rust String::from("xxx")区别
- 1. `.to_string()`(能够将任何可以显示的类型(如数字、结构体等)转为字符串)
- 2. `String::from()`
- 区别总结:
- 性能:
- 示例对比:
- 其他
- 注意:`String::new()`等价于`String::from("")`,都表示创建一个空字符串
Rust “xxx”.to_string()和Rust String::from(“xxx”)区别
.to_string() 和 String::from() 都可以用于将字符串字面量(&str 类型)转换为 String 类型,但是它们在内部实现和用途上略有不同。下面是它们的区别:
1. .to_string()(能够将任何可以显示的类型(如数字、结构体等)转为字符串)
-
.to_string()是ToStringtrait 的一个方法。ToStringtrait 是Displaytrait 的副作用,所以任何实现了Displaytrait 的类型都可以使用.to_string()方法。 -
它的调用方式是:你可以对任何实现了
ToString或Display的类型调用.to_string()方法,返回一个String。示例:
let s = "hello".to_string(); // 这里调用的是 `&str` 类型的 `.to_string()` 方法 -
.to_string()是通过调用fmt::Display来生成String的,因此它的表现力更强,能够用于将任何可以显示的类型(如数字、结构体等)转为字符串。
2. String::from()
-
String::from()是直接通过构造器将一个&str转换为String。它不会涉及Display或者格式化操作,直接执行从&str到String的转换。示例:
let s = String::from("hello"); // 直接使用 `String::from()` 将 `&str` 转换为 `String`
区别总结:
-
实现方式:
.to_string()需要Displaytrait,所以它可以用于任何实现了Displaytrait 的类型。String::from()是专门用来将&str转换为String,是一个直接的构造方法。
-
用途:
.to_string()可以用于任何可以展示(Display)的类型,比如数字、结构体、字符串字面量等。String::from()主要用于将&str转换为String,它是一个更直接的方式。
性能:
- 在性能上,二者的差异非常小,通常不会有显著的差别,因为它们的底层实现都很相似。
String::from()可能稍微高效一点,因为它不涉及额外的格式化步骤,而.to_string()会通过Displaytrait 的格式化来生成String,但是这种差异在大多数应用场景下是微乎其微的。
示例对比:
#![allow(dead_code)] // 忽略全局dead code,放在模块开头!
#![allow(unused_variables)] // 忽略未使用变量,放在模块开头!// #[derive(Debug)]fn main() {let s1: String = "hello".to_string(); // 使用 `.to_string()`let s2: String = String::from("hello"); // 使用 `String::from()`println!("{}", s1);println!("{}", s2);
}

这两个方法效果是一样的,都会将 "hello" 转换为 String 类型。
总的来说,如果你只是需要将 &str 转换为 String,String::from() 是一个更直接、更简洁的选择。如果你需要从其他类型(比如数字类型)生成字符串,并且该类型实现了 Display,那么 .to_string() 会更加通用。