• ベストアンサー

javaのchar型とstring型の使い分け

javaでchar型とstring型はどう使い分けられているのでしょうか? 一見、1文字しか入れられないcharよりstringのほうが汎用性高いので、 文字を代入する変数はすべてcharを使わずstringだけで定義しても いいような気がしました。 よろしくお願いします

質問者が選んだベストアンサー

  • ベストアンサー
  • koakino
  • ベストアンサー率44% (22/50)
回答No.3

オブジェクト指向プログラミングにおいては、可能な限り最も汎用性が低いものを使うべきです。 例えば『1文字しか扱えないメソッド』があったとします。 このメソッドの引数をString型にしてしまうと、誤って2文字以上の文字列を与えてしまう可能性があります。それが間違った使い方であることは実際にそのコードが実行されるまで分かりません。もしそこでエラーにならなかったら『エラーにはならないけど思った通りに動かない』という状況になり、バグの特定は困難です。 しかし引数をchar型(あるいはCharacter型)にすれば、2文字以上の文字列を指定するコードはビルドエラーになります。むしろほとんどのプログラマーは文字列を指定しようとすらしないでしょう。 String型を使うのは『String型であればよいとき』ではなく、『String型でなければならないとき』です。汎用性が高いものを使った方がコーディングが楽というのは分かりますが、プログラムの規模が大きくなるにつれて自分の首を絞めることになりますよ。

R958XX
質問者

お礼

遅くなってすみません、ありがとうございます。

その他の回答 (2)

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.2

まず間違いの訂正。 当初のunicodeは文字の範囲がU+0000~U+FFFFでしたのでcharは固定16ビット幅(なのでjavaのchar型は2バイトです)で1文字を表すということになっていましたが、 unicodeの方でサロゲートペア導入されてしまって文字の範囲がU+0000~U+10FFFFとなりchar型では1文字を表せなくなりました。 そのためchar型は文字単位ではなくUTF16コード単位に変更になっています(文字が1つ、2つ~ではなく、UTF16コードが1つ、2つ~です)。 java1.5からは文字を表すのはコードポイントで型はintになっています。 >javaでchar型とstring型はどう使い分けられているのでしょうか? 文字列を扱いたいときにはstring 文字を扱いたいときにはint(サロゲートペアは考慮しないというのであればchar) です。 ただ処理中、文字として扱いたいというケースはあまりない気はします。 >一見、1文字しか入れられないcharよりstringのほうが汎用性高いので、 >文字を代入する変数はすべてcharを使わずstringだけで定義しても >いいような気がしました。 確かにstringでも1文字は表せるのでできますけど、 charはプリミティブ型、stringはオブジェクト型なので単純置き換えは痛い目をみますよ。

R958XX
質問者

お礼

遅くなってすみません、ありがとうございます。

回答No.1

そりゃ2byte以上の文字を扱うのであれば、charの出番はありません。 charを使う目的だと、以下の様なことがあるでしょうか。 1. unicodeがそのまま格納できる。 2. 1byte使うだけならばcharの方がメモリの節約にもなる。 3. (昔よくあった)文字列リストを分割して格納しておくには、charの方が何かと便利。

R958XX
質問者

お礼

遅くなってすみません、ありがとうございます。

関連するQ&A