字符串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.hqwc.cn/news/265440.html

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

相关文章

Java项目-瑞吉外卖Day3

填充公共字段: 目的:由于某些属性,例如createdTime这些需要填充的字段会在多个地方出现,所以考虑使用公共字段自动填充的办法减少重复代码。 在对应属性上加入TableField注解。通过fill字段表明策略,是插入/更新的时候…

numpy数据读取保存及速度测试

目录 数据保存及读取 速度比对测试 数据保存及读取 代码示例: # 导入必要的库 import numpy as np # 生成测试数据 arr_disk np.arange(8) # 打印生成能的数据 print(arr_disk) # numpy保存数据到本地 np.save("arr_disk", arr_disk) # 加载本地数据…

java--Arrays类、自定义排序规则Comparable、自定义比较器Comparator

1.Arrays 用来操作数组的一个工具类。 2.Arrays类提供的常见方法 3.如果数组中存储的是对象,如何排序 方法一:让该对象的类实现Comparable(比较规则)接口,然后重写CompareTo方法,自己来定制比较规则。 方法二:使用下…

去除水中的悬浮固体、重金属和各种酸

每个球粒直径通常在2-5毫米范围内 的,可用于固定床吸附污染物。不过球粒尺寸可以根据客户的具体需求生产 TRAPPSORB尽管它与颗粒产品具有相同的化学成分,但由于其独特 的外表面和结构,它与其他基于MgO的材料根本不同, 它由独特的…

Python接口自动化浅析数据驱动原理

以下主要介绍使用openpyxl模块操作excel及结合ddt实现数据驱动。 在此之前,我们已经实现了用unittest框架编写测试用例,实现了请求接口的封装,这样虽然已经可以完成接口的自动化测试,但是其复用性并不高。 我们看到每个方法&…

基于深氮化镓蚀刻的微米尺寸光子器件的研制

引言 GaN和相关合金由于其优异的特性以及大的带隙、高的击穿电场和高的电子饱和速度而成为有吸引力的材料之一,与优化工艺过程相关的成熟材料是有源/无源射频光电子器件近期发展的关键问题。专用于三元结构的干法蚀刻工艺特别重要,因为这种器件通常包括…

2023年【G1工业锅炉司炉】考试及G1工业锅炉司炉作业考试题库

题库来源:安全生产模拟考试一点通公众号小程序 G1工业锅炉司炉考试参考答案及G1工业锅炉司炉考试试题解析是安全生产模拟考试一点通题库老师及G1工业锅炉司炉操作证已考过的学员汇总,相对有效帮助G1工业锅炉司炉作业考试题库学员顺利通过考试。 1、【多…

源码泄露 [RoarCTF 2019]Easy Java1

打开题目 看见登录框一开始以为是sql注入,试了一下结果不是 我们点击help看看 于此同时url 我们在url上随便输入使其报错 在这里看到了Apache Tomcat/8.5.24 再看一下网站用的是什么服务器 百度搜索得知, openresty是一个基于Nginx的web平台 那我们bp抓…

六级高频词汇3

目录 单词 参考链接 单词 400. nonsense n. 胡说,冒失的行动 401. nuclear a. 核子的,核能的 402. nucleus n. 核 403. retail n. /v. /ad. 零售 404. retain vt. 保留,保持 405. restrict vt. 限制,约束 406. sponsor n. …

request.getSession().getAttribute 获取不到值,获取到的是null

我 | 在这里 🕵️ 读书 | 长沙 ⭐软件工程 ⭐ 本科 🏠 工作 | 广州 ⭐ Java 全栈开发(软件工程师) ✈️公众号 | 热爱技术的小郑 。文章底部有个人公众号二维码。回复 Java全套视频教程 或 前端全套视频教程 即可获取 300G 教程资…

Python:核心知识点整理大全13-笔记

目录 6.4.3 在字典中存储字典 6.5 小结 第7章 用户输入和while循环 7.1 函数 input()的工作原理 7.1.1 编写清晰的程序 7.1.2 使用 int()来获取数值输入 7.1.3 求模运算符 7.1.4 在 Python 2.7 中获取输入 7.2 while 循环简介 7.2.1 使用 while 循环 往期快速传送门…

四川大学携手和鲸打造课内workshop,趣味实践教学助力数据思维培养

“通过描述性统计我们可以看到,学生们对第二食堂的倾慕之心真是苍天可鉴!” “综合上述分析,贫困人口有较大概率集中在性别为女,专业为理工科,日常消费次数、消费金额以及卡内盈余都较低的学生之中。” “有些学生长…