TL; DR; 文字列の2項演算 + が String + &str になっている理由: 効率よく計算するため一方はムーブ(String)になっている 足されるほうは借用で事足りるため借用(&str)になっている 2つの文字列型 Rust には2つの文字列型があります。 &str - 文字列スライスとも呼ばれるプリミティブな文字列型。 String - 標準ライブラリの提供する文字列型。文字列操作などに使う。 ざっくり理解すると借用が &str で、所有権があるのが String と覚えておくとよさそうです。 &str と String は相互に変換できます。 // 文字列リテラルは &str let s = "hello"; // String の初期化 let s = String::from("hello"); // &str -> String let s = "hello".to