LoginSignup
2
2

More than 1 year has passed since last update.

Java・Kotlin得意マンがRustの文字列の納得に時間を要した話

Last updated at Posted at 2022-09-11

Javaを20年やってきた自分が、Javaの先入観からかRustでString::from("hoge");という書き方をすることに納得するまで時間を要したので整理。

Java

文字列リテラル=String
Stringは固定長の文字列を扱うクラス。
+で連結できるが、インスタンスが保持している文字列に付け加えているわけではなく、新しいインスタンスが生成される。
Kotlinの場合は+演算子をオーバーロードしているが、起きていることはJavaと同じはず。

場合にもよるが、Stringを連結したい場合はStringBuilderを使うのが良いとされている。
※コンパイラがいい感じにしてくれるので、そこまで神経質にならなくても良いっぽい

Rust

文字列リテラル=&'static str
メモリ上の不変の部分に存在している。

文字列の連結など、可変長の文字列を扱う場合はString
Stringの参照はそのまま&strとして扱うこともできる。
逆に、&str&String扱いはできないので、String::fromto_stringで変換(cloneして所有)する必要がある。

整理

書き方のせいであまり意識することはないが、Javaにおいても文字列リテラルのために確保されたメモリ領域を伸長して文字を追加したりはできない。
RustにおけるString::from("hoge");を、Javaのnew StringBuilder("hoge");だと思えば特に変な話ではない。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2