クラウドで 伸びる人沈む人 |
|
|
|
Javaの基本型(特にStringは気をつける)
<IT技術の処方箋:Javaの基本型(特にStringは気をつける)> Javaは、型に厳格なプログラムです。 Perlなどをやっていた人は、かなり抵抗があると思いますが、 ルールなので、がんばって覚えておきましょう。 型とは、変数の宣言のことです。 何を宣言するかというと、この変数の属性を宣言するわけです。 代表的なものは、以下のようなものがあります。 これを、基本型といいます。 論理型 boolean(true, false) 文字型 char 整数型 short, int, long 小数点型 float, double 空型 void (何もない、返り値なし) と、多くの参考書には書いてあります。 ● で、ここからが超要注意なのが、charです。 charは、文字型と言って、一文字だけの値をもちます。 従って、↓では、エラーがでる。 public class Hawaii { char name; int tensu; public Hawaii(){ this.name = "Hellow"; this.tensu = 100; } } しかし、↓では、エラーが出ない。 public class Hawaii { char name; int tensu; public Hawaii(){ this.name = 'H'; this.tensu = 100; } } ということになります。 この違いわかりますか? 文字列と文字は異なるものです。 文字は、char型となります。 文字列は、複数の文字からつくられたもの。 つまり、'H' は、文字。 "Hawaii" は、文字列です。 では、"Hawaii" のような文字列を扱う場合は、 どうするのでしょうか。 それは、String型を使うのです。 String型は、参照型なのですが、 便利なように基本型のように使うことができます。 実際以下のプログラムを見てみましょう。 以下のようなプログラムでエラーがでません。 public class Hawaii { String name; int tensu; public Hawaii(){ this.name = "Hellow"; this.tensu = 100; } } ね。このように、基本型のように便利に使えるのがString型です。 でも、実質はStringは、参照型です。 ちなみに、Stringが参照型であることを 明示的に裏付けるものとして、 String name; name = "Hello"; String name2 = new String("Hello"); if(name == name2){ 処理A } としたときStringが基本型の場合 処理Aに入るはずですが 実際は入りません。 (name,name2に入っているのはHelloの参照情報のため) ※場合によってはOKになることもありますが それは同じ文字列のため偶然name,name2が同じHelloを 指し示した場合です。 実質比べているのは参照情報であってプログラマの意図する 文字列比較ではありません。 そのためString型には比較メソッドが用意されています。 |