当前位置: 首页 > article >正文

Rust “xxx“.to_string()和Rust String::from(“xxx“)区别(将字符串字面量(str类型)转换为String类型)

文章目录

    • Rust "xxx".to_string()和Rust String::from("xxx")区别
      • 1. `.to_string()`(能够将任何可以显示的类型(如数字、结构体等)转为字符串)
      • 2. `String::from()`
      • 区别总结:
      • 性能:
      • 示例对比:

Rust “xxx”.to_string()和Rust String::from(“xxx”)区别

.to_string()String::from() 都可以用于将字符串字面量(&str 类型)转换为 String 类型,但是它们在内部实现和用途上略有不同。下面是它们的区别:

1. .to_string()(能够将任何可以显示的类型(如数字、结构体等)转为字符串)

  • .to_string()ToString trait 的一个方法。ToString trait 是 Display trait 的副作用,所以任何实现了 Display trait 的类型都可以使用 .to_string() 方法。

  • 它的调用方式是:你可以对任何实现了 ToStringDisplay 的类型调用 .to_string() 方法,返回一个 String

    示例

    let s = "hello".to_string(); // 这里调用的是 `&str` 类型的 `.to_string()` 方法
    
  • .to_string() 是通过调用 fmt::Display 来生成 String 的,因此它的表现力更强,能够用于将任何可以显示的类型(如数字、结构体等)转为字符串。

2. String::from()

  • String::from() 是直接通过构造器将一个 &str 转换为 String。它不会涉及 Display 或者格式化操作,直接执行从 &strString 的转换。

    示例

    let s = String::from("hello"); // 直接使用 `String::from()` 将 `&str` 转换为 `String`
    

区别总结:

  1. 实现方式

    • .to_string() 需要 Display trait,所以它可以用于任何实现了 Display trait 的类型。
    • String::from() 是专门用来将 &str 转换为 String,是一个直接的构造方法。
  2. 用途

    • .to_string() 可以用于任何可以展示(Display)的类型,比如数字、结构体、字符串字面量等。
    • String::from() 主要用于将 &str 转换为 String,它是一个更直接的方式。

性能:

  • 在性能上,二者的差异非常小,通常不会有显著的差别,因为它们的底层实现都很相似。String::from() 可能稍微高效一点,因为它不涉及额外的格式化步骤,而 .to_string() 会通过 Display trait 的格式化来生成 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 转换为 StringString::from() 是一个更直接、更简洁的选择。如果你需要从其他类型(比如数字类型)生成字符串,并且该类型实现了 Display,那么 .to_string() 会更加通用。


http://www.kler.cn/a/400496.html

相关文章:

  • 数学建模——模型假设环节介绍
  • 基于单片机的手持金属探测仪设计
  • UE5入门教程:蓝图变量
  • 表格的选择弹窗,选中后返显到表格中
  • 在应用启动时,使用 UniApp 提供的 API 检查和请求权限。
  • 避免误差!Android 中正确计算时间差的方式
  • 网页web无插件播放器EasyPlayer.js H.265流媒体播放器的decoder.js报Unexpected token ‘<‘错误
  • 大麦抢票科技
  • [AI] 如何让计算机具备核心直觉知识:从常识推理到具身智能
  • 高并发的API请求有哪些注意事项?
  • 2024版本IDEA创建Sprintboot项目下载依赖缓慢
  • 正在执行例行维护 请一分钟后回来
  • ASP.NET Core Webapi 返回数据的三种方式
  • STM32CUBEIDE FreeRTOS操作教程(九):eventgroup事件标志组
  • mysql出现主备延迟之后,怎么处理
  • 动态线程池设计与实现
  • SQL 语句优化及编程方法
  • UE5.2 C++ 实现拍照功能-带UI截图
  • kubernetes如何配置默认存储
  • Spark RDD sortBy算子什么情况会触发shuffle