みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

javaでchar型とstring型はどう使い分けられているのでしょうか?

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

よろしくお願いします

投稿日時 - 2017-07-01 14:38:41

QNo.9347250

暇なときに回答ください

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

オブジェクト指向プログラミングにおいては、可能な限り最も汎用性が低いものを使うべきです。

例えば『1文字しか扱えないメソッド』があったとします。
このメソッドの引数をString型にしてしまうと、誤って2文字以上の文字列を与えてしまう可能性があります。それが間違った使い方であることは実際にそのコードが実行されるまで分かりません。もしそこでエラーにならなかったら『エラーにはならないけど思った通りに動かない』という状況になり、バグの特定は困難です。
しかし引数をchar型(あるいはCharacter型)にすれば、2文字以上の文字列を指定するコードはビルドエラーになります。むしろほとんどのプログラマーは文字列を指定しようとすらしないでしょう。

String型を使うのは『String型であればよいとき』ではなく、『String型でなければならないとき』です。汎用性が高いものを使った方がコーディングが楽というのは分かりますが、プログラムの規模が大きくなるにつれて自分の首を絞めることになりますよ。

投稿日時 - 2017-07-02 01:15:25

お礼

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

投稿日時 - 2017-07-23 15:49:12

ANo.3

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.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はオブジェクト型なので単純置き換えは痛い目をみますよ。

投稿日時 - 2017-07-01 16:10:16

お礼

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

投稿日時 - 2017-07-23 15:49:23

ANo.1

そりゃ2byte以上の文字を扱うのであれば、charの出番はありません。

charを使う目的だと、以下の様なことがあるでしょうか。

1. unicodeがそのまま格納できる。
2. 1byte使うだけならばcharの方がメモリの節約にもなる。
3. (昔よくあった)文字列リストを分割して格納しておくには、charの方が何かと便利。

投稿日時 - 2017-07-01 15:02:09

お礼

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

投稿日時 - 2017-07-23 15:49:18

あなたにオススメの質問