読者です 読者をやめる 読者になる 読者になる

int, float, Stirng などの型のなかで、String だけが大文字なのを疑問に思った・・・。

java をいじってみて疑問に思った。
  • int
  • float
  • String

全て型宣言のはずなのに、なんで String だけ大文字なの・・・・?


こちらのサイトと、javaを知っている先輩に教えていただきました。

String は型じゃない・・・?

どうやら、String は型じゃなくて、クラスらしい。

でも、

int a = 1;
String b = "test";

みたいに両方型宣言っぽく使うのにな〜。

数値型int に対して、文字型はchar

charという文字型宣言があります。
上記サイト様より

char ch = 'あ';
String str = "あ";
この二つは、
System.out.println( ch );
System.out.println( str );
を実行した時は、全く同じ結果となります。
つまり、ともにコンソールに「あ」と出力されると言うことです。
しかしこの2つには大きな違いがあります。
それは char型はプリミティブ型であり、String型はクラス型だと言うことです。
もっと簡単に表現するとString型はメソッドが実行できるが、 char型はメソッドを持たないということです。

プリミティブ型とは、『原始的な型』という意味で、javaの基本的な型であり、javaの言語仕様に含まれているらしいです。
これらは単なる型。値。
つまり機能は一切持っていません。


String はクラスなので、値と機能の両方を持っているのですね。
String がクラスなのは、

class Test {
    public static void main(String args[]) {
        String testString = new String("This is test String");
        System.out.println(testString);
    }
}

これがエラーにならないことからもわかります。


逆に、

class Test {
    public static void main(String args[]) {
        int testInt = new int(1);
        System.out.println(testInt);
    }
}

当然これはエラーです。
この場合は、

class Test {
    public static void main(String args[]) {
        int testInt = new Integer(1);
        System.out.println(testInt);
    }
}

こうしないといけません。
Integer はクラスですね。

なぜ、Stringだけクラスなのに、型宣言っぽく使えるの?

String はどうやら唯一の例外らしいです。

頻繁に利用する文字列をいちいちnewして利用するのはプログラミングを行う上で非常に手間がかかるのでString型のみ代入のような方法を取ることが例外として認められたのです。

なるほど〜。

  • int や char はプリミティブ。
  • String はクラス。
  • String や Integer のクラスは int や char をラップしている。
  • String は文字列を頻繁に使うため、唯一例外として、型宣言のようにnewやコンストラクタの実行部分がなくてもエラーがでないクラス。


むずかし〜。

でも、勉強になった。