字符串String

字符串字面量

let s = "hello";

变量s属于字符串字面量,它们属于硬编码进程序的字符串值,属于不可变的类型。但并不是所有字符串的值都能够在编写代码时确定。

String类型

String类型会在堆上分配到自己需要的存储空间,所以它能够处理在编译时未知大小的文本。

对于String类型而言,为了支持一个可变、可增长的文本类型,我们需要在堆上分配一块在编译时未知大小的内存来存放数据。这同时也意味着:

  • 我们使用的内存是操作系统在运行时动态分配出来的
  • 当使用完String时,我们需要通过某种方式将这些内存归还给操作系统
    let s: String = String::from("hello");let s2 = s;

String对象的内存布局实际由3部分组成,如下图所示:一个指向存放字符串内容的指针(ptr)、一个长度(len)及一个容量(capacity),这部分的数据存储在栈上。

在这里插入图片描述

将变量s赋值给s2,其实是栈上将变量的所有权转移给了s2RUST也不需要在s离开作用域后做任何清理,试图在s2创建完毕后使用s会导致编译错误。

浅拷贝

假如你在其它语言中接触过浅拷贝(shallow copy)和深拷贝(deep copy)这两个术语,那么你也许会将这里的复制行为视作浅拷贝。但由于RUST同时使第一个变量无效了,所以我们使用了新的术语移动(move)来描述这一行为,而不再使用浅拷贝。

RUST的设计原则:RUST永远不会自动地创建数据的深度拷贝。因此在RUST中,任何自动的赋值操作都可以被视为高效的。

clone

当你确实需要去深拷贝String堆上的数据,而不仅仅是栈数据时,就可以使用一个名为clone的方法。

    let s: String = String::from("hello");let s2 = s.clone();

字符串切片

字符串切片是指String对象中某个连续部分的引用,它的使用方式如下:

    let s: String = String::from("hello");let hello = &s[0..5];

我们在一对方括号中指定了切片的范围区间[start_index..end_index],其中的end_index是切片终止位置的的下一个索引值。

切片数据结构在内部存储了指向其实位置的引用和一个描述切片长度的字段,这个切片长度就等于end_index-start_index

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

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

相关文章

声明式数据建模、定义简单易懂:下一代 ORM 助你效率倍增 | 开源日报 No.102

prisma/prisma Stars: 34.0k License: Apache-2.0 Prisma 是一个下一代 ORM,包括以下工具: Prisma Client:为 Node.js 和 TypeScript 自动生成的类型安全查询构建器Prisma Migrate:声明式数据建模和迁移系统Prisma Studio&#…

鸿蒙应用开发(二)环境搭建

开发流程 IDE下载 首先下载HUAWEI DevEco Studio,介绍首次启动DevEco Studio的配置向导: 运行已安装的DevEco Studio,首次使用,请选择Do not import settings,单击OK。安装Node.js与ohpm。node.js 是基于 V8 引擎构…

JavaScript常用技巧专题二

文章目录 一、前言二、生成随机字符串三、转义HTML特殊字符四、单词首字母大写五、将字符串转换为小驼峰六、删除数组中的重复值七、移除数组中的假值八、获取两个数字之间的随机数九、将数字截断到固定的小数点十、日期10.1、计算两个日期之间天数10.2、从日期中获取是一年中的…

【Java编程实现 9 * 9 乘法表格打印四种形态,七种打法】

Java编程实现 9 * 9 乘法表格打印四种形态,七种方法打印 废话篇打印 9 * 9 乘法表格嵌套for循环实现左下角打印嵌套for循环实现左上角打印嵌套for循环实现右上角打印嵌套for循环实现右下角打印 使用while循环打印 9 * 9 乘法表格(一)使用whil…

基于SpringBoot+Vue前后端分离的景点数据分析平台(Java毕业设计)

大家好,我是DeBug,很高兴你能来阅读!作为一名热爱编程的程序员,我希望通过这些教学笔记与大家分享我的编程经验和知识。在这里,我将会结合实际项目经验,分享编程技巧、最佳实践以及解决问题的方法。无论你是…

awt中文乱码-Intellij IDEA

乱码的根本原因在于秦始皇嘎太早了(bushi 解决方法:肉眼可见的编码设置统一为GBK 1.打开设置找到文件编码 2.肉眼可见的编码统统改成GBK 有人该问了,为什么不改成utf-8,因为awt的编码由操作系统决定,我的是win家庭中…

Nextui使用

安装和使用 https://nextui.org/docs/frameworks/nextjs 自定义主题 https://nextui.org/docs/customization/customize-theme // tailwind.config.js const {nextui} require("nextui-org/react");/** type {import(tailwindcss).Config} */ module.exports {…

deepstream docker安装

介绍 deepstream为dGPU和Jetson平台提供dockers containers,这些镜像可以方便开发者很快地部署deepstream应用。deepstream的docker images可以在NGC web中得到。 安装Docker Docker 是一个开源的容器化平台,它允许你构建,测试&#xff0c…

0基础学java-day18-( 坦克大战【2】)

课件资源放在文末 1.线程-应用到坦克大战 1.1 坦克大战 0.3 【坦克类:包括坦克的基本属性,以及坦克的移动方法】 package com.hspedu.tankgame03;/*** author 韩顺平* version 1.0*/ public class Tank {private int x;//坦克的横坐标private int y;…

一些AG10K FPGA 调试的建议-Douglas

PLL AGM FPGA 在配置成功时,PLL 已经完成锁定,lock 信号已经变高;如果原设计中用 lock 信号输出实现系统 reset 的复位功能,就不能正确完成上电复位;同时,为了保证 PLL 相移的稳定,我们需要在 P…

C++笔记之重载和重写辨别

C笔记之重载和重写辨别 code review! 文章目录 C笔记之重载和重写辨别重载(overloading)重写(Overriding) 在C中,重载(overloading)和重写(overriding)是面向对象编程中…

笔记69:Conv1d 和 Conv2d 之间的区别

笔记地址:D:\work_file\(4)DeepLearning_Learning\03_个人笔记\4. Transformer 网络变体 a a a a a a a a a a a

设计模式-门面模式(Facade)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、定义二、结构 前言 在组件构建过程中,某些接口之间直接依赖会带来很多问题,甚至无法直接实现。采用一层间接接口,来隔离…

浅谈CompletableFuture

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 回顾FutureTask 之前我…

安全高效 江西变电站成功应用国家电网无人机巡检

随着电力需求的迅速增长,电网的巡检、维护与保养变得越来越重要。为迎接这一挑战,江西供电公司的一座变电站成功引入了复亚智能国家电网无人机巡检系统,在提升巡检水平、开创新型巡检模式方面做出了重要尝试,为电网设备的高效巡检…

EDA 数字时钟

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、数字时钟是什么?二、EDA里面数码管的显示1.元件模型2.参考程序3. 实验仿真波形4.实验现象5. 仿真问题 三、显示时钟1. 时钟电路模块2.参考程序3…

gRPC .net学习

学习helloworld server用.net client有.net的控制台 和 unity server端 直接使用vs2022创建(需自行看有无装asp.net哦),搜索gPRC,使用6.0吧,创建工程后直接F5跑起来,服务端到此完成 .net控制台client,创建新的控制台,使用NuGet,然后导入server端的Protos文件夹 学…

基于Jedis来探讨池化技术

为什么需要池化技术 系统运行时必然是需要数据库连接、线程等一些重量级对象,频繁的创建这种对象对性能有着不小的开销,所以为了减少没必要的创建和开销,我们就用到了池化技术。 通过创建一个资源池来保存这些资源便于后续的复用&#xff0c…

【C++初阶】七、内存管理(C/C++内存分布、C++内存管理方式、operator new / delete 函数、定位new表达式)

相关代码gitee自取: C语言学习日记: 加油努力 (gitee.com) 接上期: 【C初阶】六、类和对象(初始化列表、static成员、友元、内部类)-CSDN博客 目录 一 . C/C内存分布 C/C中程序内存区域划分: 二 . C内存管理方式 …

16.Java程序设计-基于SSM框架的android餐厅在线点单系统App设计与实现

摘要: 本研究旨在设计并实现一款基于SSM框架的Android餐厅在线点单系统,致力于提升餐厅点餐流程的效率和用户体验。通过整合Android移动应用和SSM框架的优势,该系统涵盖了用户管理、菜单浏览与点单、订单管理、支付与结算等多个功能模块&…