字符串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.pswp.cn/news/213500.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/213500.shtml
英文地址,請注明出處:http://en.pswp.cn/news/213500.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Nacos簡介

1.Nacos簡介 1.1.為什么叫Nacos? 前四個字母分別為Naming和Configuration的前兩個字母,最后的s為service。 1.2.Nacos是什么? nacos是第二代微服務SpringCloudAlibaba開源的一款注冊中心和分布式配置中心組件,其功能上為第一代微…

聲明式數據建模、定義簡單易懂:下一代 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…

1003 我要通過!

“答案正確”是自動判題系統給出的最令人歡喜的回復。本題屬于 PAT 的“答案正確”大派送 —— 只要讀入的字符串滿足下列條件,系統就輸出“答案正確”,否則輸出“答案錯誤”。 得到“答案正確”的條件是: 字符串中必須僅有 P、 A、 T這三種…

詳解Keras3.0 Layers API: Core layers

1、Input keras.Input(shapeNone,batch_sizeNone,dtypeNone,sparseNone,batch_shapeNone,nameNone,tensorNone, ) 參數說明 shape: 輸入張量的形狀。如果為None,則可以動態地指定形狀。batch_size: 批處理大小。如果為None,則可以動態地指定批處理大小…

基于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…

29. 如何在Spring所有BeanDefinition注冊完后做擴展?

如何在Spring所有BeanDefinition注冊完后做擴展? 通常可以使用beanFactoryPostProcessor 對已注冊的BeanDefinition進行修改或者通過它的子接口BeanDefinitionRegistryPostProcessor 再進行注冊額外擴展 BeanDefinitionRegistryPostProcessor 1、概述 public interface Bea…

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

XMemcached network layout exception java.nio.channels.ClosedChannelException

java.nio.channels.ClosedChannelException 表示嘗試在已關閉的通道上進行 I/O 操作,通常發生在網絡連接意外關閉后嘗試在關閉的通道上執行讀取或寫入操作。 XMemcached network layout exception 可能是由于 XMemcached 客戶端在嘗試與 Memcached 服務器通信時發生…

一些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)

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄 前言一、定義二、結構 前言 在組件構建過程中,某些接口之間直接依賴會帶來很多問題,甚至無法直接實現。采用一層間接接口,來隔離…

SpringBoot報No qualifying bean of type ‘com.lzk.mapper.UserMapper‘ available

這個異常是SpringBoot程序沒有找到要Bean&#xff0c;這里提示找不到UserMapper&#xff0c;有以下三種解決方式&#xff1a; 在UserMapper上添加注解MapperMapper public interface UserMapper extends BaseMapper<User> { }在啟動類上進行Mapper包掃描&#xff0c;不用…