stringは実はクラスです 〜スイカは野菜だった?〜

C#を学び始めたとき、多くの人がこう思います。

int number = 10;
float value = 3.14f;
string name = "山田";

この3つは同じ「型」に見えますよね。

でも実は、

stringだけは立ち位置が違います。

今日はそれを、スイカの例えで説明します。


🍉 スイカは野菜?果物?

スイカはどう思いますか?

  • 食べ方は果物
  • でも農業分類では野菜(果実的野菜)

でしたよね。

つまり

見た目は果物だけど、分類上は野菜

これと同じことが

C#の string にも起きています。


int と float は「値型」

まずはこの2つ。

int age = 20;
float height = 170.5f;

これらは 値型(Value Type) です。

特徴:

  • 変数の中に値そのものが入る
  • 軽量
  • メモリ上に直接格納される

いわば、

シンプルな数値専用の型

です。


string は見た目は似ている

string name = "山田";

書き方は int と似ています。

だから多くの人がこう思います。

stringも数値と同じ仲間かな?

でも違います。


string はクラスです

実は string は

System.String

という クラス です。

つまり

  • 参照型(Reference Type)
  • オブジェクト
  • 中身はかなり複雑な仕組み

なんです。


例えるなら

例え
int単純な数字ボックス
float小数ボックス
string高機能な文字列マシン

stringは単なる箱ではなく、

  • 長さを数えられる
  • 文字を切り出せる
  • 結合できる
  • 置換できる

など、多くの機能を持っています。

だからクラスなんです。


スイカとの比較

食べ物C#
スイカは見た目は果物stringは見た目は基本型
分類上は野菜実はクラス
ちょっと意外ちょっと意外

なぜ区別が大事?

今はまだ

string name = "山田";

としか使っていないかもしれません。

でも後で学ぶ

  • クラス
  • インスタンス
  • 参照
  • null
  • ヒープメモリ

などを理解するとき、

「stringはクラスだった」

という知識が効いてきます。


まとめ

  • int と float は値型
  • string は参照型(クラス)
  • 見た目に騙されないことが大事

スイカが野菜だったように、

stringは実はクラスです。


今日の豆知識:

スイカは野菜、stringはクラス。


上記で、

string はクラスです

と説明しました。

すると、鋭い人がこう思います。

クラスなら new が必要じゃないですか?

たしかに。

Player p = new Player();

クラスは普通こう書きますよね。

でも string は…

string name = "山田";

new していません。

なぜでしょう?


実はこう書いているのと同じ

このコード:

string name = "山田";

実は内部的には、ほぼこれと同じ意味です。

string name = new string("山田");

つまり、

ちゃんと new されています。

ただし――

コンパイラが自動でやってくれている のです。


文字列リテラルという特別扱い

"山田"

この書き方を 文字列リテラル と言います。

C#では、文字列リテラルは特別で、

  • コンパイル時に生成される
  • 文字列プールという場所に保存される
  • 同じ文字列は共有される

という仕組みがあります。


つまりどういうこと?

string a = "山田";
string b = "山田";

このとき、

実はメモリ上では

同じ「山田」を共有しています。

無駄に new を何回もしていないのです。

賢いですね。


では new してはいけないの?

こう書くこともできます。

string name = new string("山田".ToCharArray());

でも普通は書きません。

理由:

  • 無駄にインスタンスを作る
  • メモリ効率が悪くなる
  • 読みにくい

だから普段はリテラルを使います。


まとめ

疑問答え
string はクラス?はい
じゃあ new は?コンパイラがやっている
なぜ書かなくていい?文字列リテラルが特別扱いだから

授業で使える一言

string はクラス。

でも特別扱いされているクラス。


ひでぽんさんのクラス段階なら、

ここでは

  • 「ヒープ」
  • 「文字列プールの詳細」

までは触れなくて大丈夫です。

あくまで

「クラスだけど、特別枠」

くらいがちょうど良いです。

訪問数 7 回, 今日の訪問数 7回