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

文章目录

    • 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()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() 会更加通用。

其他

注意:String::new()等价于String::from(""),都表示创建一个空字符串

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/61427.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何设置谷歌浏览器的家庭保护功能

谷歌浏览器是全球使用最广泛的网络浏览器之一,提供了许多强大的功能和扩展。对于有小孩的家庭来说,设置家庭保护功能可以帮助家长管理孩子的上网行为,确保他们在一个安全、健康的网络环境中浏览网页。本文将详细介绍如何设置谷歌浏览器的家庭…

Vue:后端返回二进制文件,前端如何实现浏览器自动下载?

Vue项目开发中,遇到界面下载功能时,前端如何实现将后端返回二进制文件在浏览器自动下载? 一、关键代码: export function downloadFile(fileName) {axios({method: post,url: process.env.VUE_APP_BASE_API /cgi-bin/file,data:…

触发器清零引脚要上拉高电平

在使用触发器设计电路时,清零引脚该如何处理呢? 下图中NCLR是清零引脚,由于未使用就悬空了,没有任何电气连接,这样做是不对的。应该上拉至高电平。 加入电阻R3,上拉至3.3V,这样不使用清零功能的…

Vue_Router权限控制:不同角色显示不同路由

写在前面 在Vue中,Router是一个官方提供的用于处理应用程序路由的插件。它允许我们创建单页应用程序(SPA),其中不同的页面和组件可以通过URL进行导航和展示。使我们可以轻松地创SPA,并实现可复用和可组合的组件…

设计模式之 适配器模式

适配器模式(Adapter Pattern)是一种结构型设计模式,它允许将一个类的接口转换成客户端所期望的另一个接口。通过使用适配器模式,原本由于接口不兼容的类可以进行协作。简单来说,适配器模式就是将不兼容的接口连接起来&…

【LLM训练系列02】如何找到一个大模型Lora的target_modules

方法1:观察attention中的线性层 import numpy as np import pandas as pd from peft import PeftModel import torch import torch.nn.functional as F from torch import Tensor from transformers import AutoTokenizer, AutoModel, BitsAndBytesConfig from typ…

萨瑞MCU R7FA8D1BH环境搭建教程

萨瑞MCU R7FA8D1BH环境搭建教程 如果你是大学生 遇到电子技术 学习 成长 入行难题 佳喔威信,给你提供一定资源和战略方法上的帮助 相信我的专业职业经历一定能帮到你 目录 概述 2. 开发板介绍3. 搭建rtthread环境4. 安装瑞萨的keil环境5. 搭建瑞萨的keil辅助环境…

鸿蒙实战:使用显式Want启动Ability

文章目录 1. 实战概述2. 实现步骤2.1 创建鸿蒙应用项目2.2 修改Index.ets代码2.3 创建SecondAbility2.4 创建Second.ets 3. 测试效果4. 实战总结5. 拓展练习 - 启动文件管理器5.1 创建鸿蒙应用项目5.2 修改Index.ets代码5.3 测试应用运行效果 1. 实战概述 本实战详细阐述了在 …

PH热榜 | 2024-11-19

DevNow 是一个精简的开源技术博客项目模版,支持 Vercel 一键部署,支持评论、搜索等功能,欢迎大家体验。 在线预览 1. Layer 标语:受大脑启发的规划器 介绍:体验一下这款新一代的任务和项目管理系统吧!它…

React Native 基础

React 的核心概念 定义函数式组件 import组件 要定义一个Cat组件,第一步要使用 import 语句来引入React以及React Native的 Text 组件: import React from react; import { Text } from react-native; 定义函数作为组件 const CatApp = () => {}; 渲染Text组件

Jenkins更换主题颜色+登录页面LOGO图片

默认主题和logo图片展示 默认主题黑色和白色。 默认LOGO图片 安装插件 Login ThemeMaterial Theme 系统管理–>插件管理–>Available plugins 搜不到Login Theme是因为我提前装好了 没有外网的可以参考这篇离线安装插件 验证插件并修改主题颜色 系统管理–>A…

LLM文档对话 —— pdf解析关键问题

一、为什么需要进行pdf解析? 最近在探索ChatPDF和ChatDoc等方案的思路,也就是用LLM实现文档助手。在此记录一些难题和解决方案,首先讲解主要思想,其次以问题回答的形式展开。 二、为什么需要对pdf进行解析? 当利用L…

JAVA:探索 PDF 文字提取的技术指南

1、简述 随着信息化的发展,PDF 文档成为了信息传播的重要媒介。在许多应用场景下,如数据迁移、内容分析和信息检索,我们需要从 PDF 文件中提取文字内容。JAVA提供了多种库来处理 PDF 文件,其中 PDFBox 和 iText 是最常用的两个。…

【priority_queue的使用及模拟实现】—— 我与C++的不解之缘(十六)

前言 ​ priority_queue,翻译过来就是优先级队列,但是它其实是我们的堆结构(如果堆一些遗忘的可以看一下前面的文章复习一下【数据结构】二叉树——顺序结构——堆及其实现_二叉树顺序结构-CSDN博客),本篇文章就来使用…

MacOS下的Opencv3.4.16的编译

前言 MacOS下编译opencv还是有点麻烦的。 1、Opencv3.4.16的下载 注意,我们使用的是Mac,所以ios pack并不能使用。 如何嫌官网上下载比较慢的话,可以考虑在csdn网站上下载,应该也是可以找到的。 2、cmake的下载 官网的链接&…

Kibana 本地安装使用

一 Kibana简介 1.1 Kibana 是一种数据可视化工具,通常需要结合Elasticsearch使用: Elasticsearch 是一个实时分布式搜索和分析引擎。 Logstash 为用户提供数据采集、转换、优化和输出的能力。 Kibana 是一种数据可视化工具,为 Elasticsear…

基于大数据爬虫数据挖掘技术+Python的网络用户购物行为分析与可视化平台(源码+论文+PPT+部署文档教程等)

#1024程序员节|征文# 博主介绍:CSDN毕设辅导第一人、全网粉丝50W,csdn特邀作者、博客专家、腾讯云社区合作讲师、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老…

【Android、IOS、Flutter、鸿蒙、ReactNative 】实现 MVP 架构

Android Studio 版本 Android Java MVP 模式 参考 模型层 model public class User {private String email;private String password;public User(String email, String password) {this.email = email;this.password = password;}public String getEmail() {return email;}…

android 使用MediaPlayer实现音乐播放--获取音乐数据

前面已经添加了权限&#xff0c;有权限后可以去数据库读取音乐文件&#xff0c;一般可以获取全部音乐、专辑、歌手、流派等。 1. 获取全部音乐数据 class MusicHelper {companion object {SuppressLint("Range")fun getMusic(context: Context): MutableList<Mu…

Android kotlin之配置kapt编译器插件

配置项目目录下的gradle/libs.versions.toml文件&#xff0c;添加kapt配置项&#xff1a; 在模块目录下build.gradle.kt中增加 plugins {alias(libs.plugins.android.application)alias(libs.plugins.jetbrains.kotlin.android)// 增加该行alias(libs.plugins.jetbrains.kotl…