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:…

dpdk ppe模块细分

在基于 openEuler 系统运行 DPDK(Data Plane Development Kit) 时,涉及到的 PPE(Packet Processing Engine) 中的 SSU(Service Scheduling Unit)、PPP(Packet Processing Pipeline&a…

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

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

FPGA经验谈系列文章——9、块储存器的高效使用

前言 每个7系列的FPGA都包含多个36Kb容量的块存储器,俗称BlockRAM。一个BlockRAM是36Kb,它能够拆分成独立的两个18Kb,因此最小的使用单位就是18Kb。如果只想使用1Kb怎么办?不好意思,也得占用半个块存储资源18Kb。那如果使用了19Kb的话,那么就得使用一个完整的36Kb的Block…

SparkSQL 对 SQL 查询的优化静态优化和动态优化两大部分介绍

SparkSQL 对 SQL 查询的优化主要分为 静态优化 和 动态优化 两大部分,其中静态优化主要在查询编译时进行,而动态优化则是在查询执行过程中进行。SparkSQL 的优化包括了多种技术,例如 RBO(基于规则的优化)、CBO&#xf…

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…

05_Spring JdbcTemplate

在继续了解Spring的核心知识前,我们先看看Spring的一个模板类JdbcTemplate,它是一个JDBC的模板类,用来简化JDBC的操作。 接下来以实际来进行说明 一、实例环境准备 数据库及表准备 我们在本地mysql中新增一个数据库test,并新增一张数据表:user create database if not…

萨瑞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. 实战概述 本实战详细阐述了在 …

【Nginx】反向代理Https时相关参数:

在Nginx代理后台HTTPS服务时,有几个关键的参数需要配置,以确保代理服务器能够正确地与后端服务器进行通信。一些重要参数的介绍: proxy_ssl_server_name:这个参数用于指定是否在TLS握手时通过SNI(Server Name Indicati…

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组件

一文详细了解websocket应用以及连接断开的解决方案

文章目录 websocketvite 热启动探索websocket -心跳websocket 事件监听应用过程中问题总结 websocket Websocket简介 定义和工作原理 Websocket是一种在单个TCP连接上进行全双工通信的协议。与传统的HTTP请求 - 响应模式不同,它允许服务器主动向客户端推送数据。例…

Vue 3与TypeScript集成指南:构建类型安全的前端应用

在Vue 3中使用TypeScript,可以让你的组件更加健壮和易于维护。以下是使用TypeScript与Vue 3结合的详细步骤和知识点: 1. 环境搭建 首先,确保你安装了Node.js(推荐使用最新的LTS版本)和npm或Yarn。然后,安…

React-useRef与DOM操作

#题引:我认为跟着官方文档学习不会走歪路 ref使用 组件重新渲染时,react组件函数里的代码会重新执行,返回新的JSX,当你希望组件“记住”某些信息,但又不想让这些信息触发新的渲染时,你可以使用ref&#x…

# Spring事务

Spring事务 什么是spring的事务? 在Spring框架中,事务管理是一种控制数据库操作执行边界的技术,确保一系列操作要么全部成功,要么全部失败,从而维护数据的一致性和完整性。Spring的事务管理主要关注以下几点&#xf…

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

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