The rust String  is a growable, mutable, owned, UTF-8 encoded string type.

&str ,切片,是按UTF-8编码对String中字符的一个引用,不具有owned。

不具有owner关系,是非常非常重要的一区别,看下面代码

pub fn test1(){
//"abc"是 &str 切片类型
let s1 = "abc";
let s2 = s1;
//如果切片具体owner,则下面的语句必报错; 实际上下面的语句是可以正常运行的。
println!("{}",s1);
println!("{}",s2);
} pub fn test2(){
let s1 = String::from("abcd");;
let s2 = s1; //由于s1的owner已经转移给s2,下面再使用s1则会报错
// println!("{}",s1);
println!("{}",s2);
} pub fn test3(){
let s1 = String::from("abcd"); //取s1的切片则没有关系
let s2 = s1.as_str();
println!("{}",s1); println!("{}",s2);
}

切片转String

 let fil: String= "/tmp/hello.txt".to_string();
还有一个方法叫into_string(),多了一个in,in是进入的意思,let B = A.into_string();
就是A进到B里去了
在rust中就是ownership的转换,

首先, A得具有ownership,像切片这种类型本身是另外一个类型的片段数据,没有ownership,就没法用into_string这个方法
切片的传值、传参,只能是将自己指向的地址传递过去,让另外一个变量指向自己指向的地址,所有切片传参一定是这样的 aaa(&name),有一个&

然后,
let B = A.into_string();
调用之后,A就不能再用了,以后生效的只有B

它们的方法定义

to_string:

fn to_string(&self) -> String;

into_string:

fn into_string(self) -> String;
关于它们的不同,这里说的更详细

#[stable(feature = "box_str", since = "1.4.0")]
#[inline]
pub fn into_string(self: Box<str>) -> String {
let slice = Box::<[u8]>::from(self);
unsafe { String::from_utf8_unchecked(slice.into_vec()) }
}
#[stable(feature = "rust1", since = "1.0.0")]
impl ToOwned for str {
type Owned = String;
#[inline]
fn to_owned(&self) -> String {
unsafe { String::from_utf8_unchecked(self.as_bytes().to_owned()) }
} fn clone_into(&self, target: &mut String) {
let mut b = mem::take(target).into_bytes();
self.as_bytes().clone_into(&mut b);
*target = unsafe { String::from_utf8_unchecked(b) }
}
}


最新文章

  1. 实现AJAX的异步交互的步骤
  2. iOS 利用webView加载html代码,在代理中获取html页面的链接时出现的问题
  3. javascript --- 事件冒泡与事件捕获
  4. css实现元素居中
  5. SQLite之读取数据库内容
  6. asp.net visio com接口 asp.net和visio混合编程
  7. windows下python 编码问题
  8. Python 基础-python函数
  9. Asp.Net WebAPI 中Cookie 获取操作方式
  10. bootstrap实例 之 响应式表格-----2017-05-15
  11. 五、在IDEA中使用GIt版本控制并将本地代码上传至Github
  12. 前端面试题(6)图片格式jpg,gif,png-8,png-24的区别,及其各自的使用场景
  13. php-fpm开机启动
  14. struts 开发流程
  15. 自学Zabbix4.0之路
  16. es6快速入门
  17. 2017-12-15python全栈9期第二天第六节之三次登陆机会升级版再试试
  18. c语言学习笔记-break
  19. DGUT_FLY退役贴 &amp;&amp; FunCfans毕业总结-竞赛篇
  20. openssl pem文件的读取

热门文章

  1. Docker安装配置Tomcat
  2. if语句和switch语句的选择与区别
  3. 学习JS的第一天--初识JS
  4. Python - 一行代码查看当前操作系统默认的编码标准
  5. 菜鸡的Java笔记 - java 反射机制
  6. 使用pmml跨平台部署机器学习模型Demo——房价预测
  7. [luogu7599]雨林跳跃
  8. 监听器watch
  9. C/C++ Qt TableDelegate 自定义代理组件
  10. [USACO07MAR]Face The Right Way G