2016-10-07 2 views
0

私はマップを持っています。 Map<Character, Integer> map1 = new TreeMap<Character, Integer>();文字と文字は同じですか?

このマップを使用して、ファイルをスキャン中に実行する一意の文字を格納しています。私はStringを得て、char配列にある文字を格納するためにString.toCharArray()を使用しています。

私のchar配列の要素を入れようとすると、map1.put(charay[I], 1)と言うと、そのマップはラッパークラスとして解釈しますか?またはcharactercharが異なっています。私はいくつかの研究をしていたし、基本的なデータ型がうまく動作しない場合(マップのように)ラッパークラスを使用するように見えるが、私は仕事をしているだろうか?

+0

autoboxing https://docs.oracle.com/javase/tutorial/java/data/autoboxing.html –

+0

'Character'はプリミティブ' char'のラッパー・クラスです。メソッドを提供し、マップ、リストなどのデータ構造での使用を可能にします。これらは、オートボクシングおよびアンボクシングと互換的に使用できます。 – Li357

+0

これはまさに私が聴きたいと思っていたものです! – Podo

答えて

1

文字とcharが同じではありません、あなたが言うようにクラスが考えられるが、前者は、クラスと後者のプリミティブ型でありますプリミティブ型ではなくオブジェクトのみが許される場所でプリミティブ型のオブジェクトインスタンス「ラッパー」表現を提供する。

コンパイラのエラーを出すのではなく、一方から他方への変換が発生する必要があるコードがある場所では、Javaコンパイラ(javac)が独自のコードを挿入します。あなたのための変換。この変換は、Auto-boxingおよびauto-unboxingと呼ばれ、Character.valueOf(char)およびCharacter.charValue()の処理と同じです。さらに、コンパイラは、メモリ消費を制限するために生成されたCharacterオブジェクトのキャッシュを行います。オートボクシングは、この変換とキャッシングコードをコンパイラに挿入するだけで、可視コードがよりきれいに見えるようになりますが、実際には起こっていることですが、コンパイラによって余分なコードが挿入されます。

0

はい。リンク(例に注意)からAutoboxing

オートボクシングは、Javaコンパイラは、プリミティブ型とそれに対応するオブジェクトのラッパークラス間せる自動変換です。たとえば、intIntegerdoubleDoubleに変換するなどします。変換が逆の場合は、アンボックスと呼ばれます。ここで

はオートボクシングの最も単純な例である:

Character ch = 'a'; 
関連する問題