質問: 頭があれで、説明が下手ですいませんが、Javaでは変数宣言に使う「型」が9つぐらいありますが↓ | 分類 | 型名 | 格納するデータ | 利用頻度 | | --- | --- | --- | --- | | 整数 | long | 大きな整数 | △ | | 整数 | int | 普通の整数 | ◎ | | 整数 | short | 小さな整数 | △ | | 整数 | byte | さらに小さな整数 | △ | | 小数 | double | 普通の小数 | 〇 | | 小数 | float | 少しあいまいでもよい小数 | △ | | 真偽値 | boolean | trueかfalse | 〇 | | 文字 | char | 1つの文字 | △ | | 文字列 | String | 文字列の並び | ◎ | 1.**整数で使う型が4つもある**のはなぜでしょうか?**良く使われる型がintだけ**で、それ以外はあまり使わないと思いますが、**なぜ3種類もある**のですか? 2.小数で使う型が2つあり、doubleのほうはより厳密な計算ができるのですが、floatのほうはあまり厳密な計算ができないようですが、なぜ「**厳密な計算(double)**」と「**厳密ではない(あいまいな)計算(float)**」←**この2つがあるのですか?** 3.**文字で使う型(char)**と**文字列(String)で使う型**がありますが、**なぜ2つもあるのですか?** **文字列型(String)はよく使われます**が、**文字型(char)はあまり使われない**と思いますが**なぜ2つもあるのでしょうか?** よろしくお願いします。
回答: いちばん端的に言ってしまえば、**設計者がそう決めたから**以上の理由はないです。実際、Ruby 2.4には整数が`Integer`だけ(メモリの許す限りの桁数に対応)、小数も`double`相当のものしかありません。さらには、JavaScriptの数値は`double`相当のものが1つあるだけです。 とはいえ、これだけの型を用意したのは、**他の環境との互換性**という側面もあります。CPU自身が扱えるデータとして8ビット、16ビット、32ビット、64ビット整数、32ビット・64ビットの浮動小数点数のような型がありますので、OS環境とデータをやり取りする場合にはそれ相応の型が必要となります。 Javaの設計は90年台になりますので、Rubyのような「大きめの型で全部済ませる」では当時に性能が出なかったので、必要なサイズの型を適宜使えるように用意しておいた、ということもあるのかもしれません。