引用Rust程序设计语言中的一段话:
字符串是新晋 Rustacean 们通常会被困住的领域,这是由于三方面理由的结合:Rust 倾向于确保暴露出可能的错误,字符串是比很多开发者所想象的要更为复杂的数据结构,以及 UTF-8。所有这些要素结合起来对于来自其他语言背景的开发者就可能显得很困难了。
在学习编程语言的过程中,我们很多时候都会忽略字符串的复杂度,因为往往我们只是利用字符串表达信息罢了,并不会深究。学习Rust确实是个困难的过程,尽管已经有了其他语言的基础,Rust不知道出于什么目的,没有沿用很多传统的概念,而是引入了很多让人感觉奇怪的名词,或者是写法。。。挺难入门的。
字符串在Java和Rust中的区别
Rust | Java | |
---|---|---|
存储方式 | 字节集合 | Java8:采用char数组。<br />Java9之后:采用byte数组,同时使用coder标识编码。 |
声明方式 | let s = String::from("hello world");<br />let mut s = String::from("hello world");<br />let s = "hello world".to_string();<br />…… | String s = "hello world";<br />String s = new String("hello world")<br />…… |
加号拼接 | s = s + " world"; | s = s + " world"; |
String 的类型是由标准库提供的,而没有写进核心语言部分,<br />它是可增长的、可变的、有所有权的、UTF-8 编码的字符串类型。 |
字符串是常量;它们的值在创建后不能更改。 |
Rust 的核心语言中只有一种字符串类型:
str
,字符串 slice,它通常以被借用的形式出现,&str
。Strings始终是有效的 UTF-8。
在将一个字符串对象作为另一个字符串对象的构造函数参数时,并不会完全复制 value 数组内容,⽽是都会指向同一个 value 数组。貌似Java和Rust都是这样。
在Java中,String被声明为final,因此不可被继承。