プロフィール


Live!Ads

カテゴリ

iPad (2)

スポンサー


検索(サイト内)

全タイトルを表示


最近の記事

最近のコメント

最近のトラックバック

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。



【--/--/-- --:--】 スポンサー広告| tb(-) cm(-)

[Android][Java]Intger#decode() vs parseInt() vs getInteger() vs valueOf()

文字列を数値(int)に変換しようと思ったのですが、Integer クラスにはそれらしきメソッドが4つもあります。


decode と parseInt と getInteger と valueOf 、全部 static メソッドだし。

何でこんなにたくさんあるの?って感じですが、恐らく意味があるんでしょう。というわけで調査。





Android Developers の Integer クラスの説明にはどれも似たような説明が書いてあります。

(しかし getInteger は、「Returns the Integer value of the system property identified by string.」 とあるので、なんか違うっぽいです。)

また、valueOf には、parseInt へのリンク(See Also)があるので、両者はたぶん同じものと思われます。

サンプル書いて動かしてみました。



int num = 0;
num = Integer.decode("100"); // ⇒ 100
num = Integer.decode("#100");

// ⇒ 16進数として評価されるので「256」
num = Integer.decode("0100");

// ⇒ 8進数として評価されるので「64」
num = Integer.parseInt("100"); // ⇒ 100
num = Integer.parseInt("100", 10);

// ⇒ 10進数として評価されるので「100」
num = Integer.parseInt("100", 16);

// ⇒ 16進数として評価されるので「256」
num = Integer.parseInt("100", 8);

// ⇒ 8進数として評価されるので「64」
num = Integer.parseInt("#100"); // ⇒ 例外
num = Integer.parseInt("0100");

// ⇒ 10進数と評価されるので「100」
num = Integer.parseInt("FF", 16);

// ⇒ 16進数として評価されるので「255」
num = Integer.parseInt("FF"); // ⇒ 例外
num = Integer.valueOf("100", 10);

// ⇒ 10進数として評価されるので「100」
num = Integer.valueOf("100", 8);

// ⇒ 8進数として評価されるので「64」
num = Integer.valueOf("#100"); // ⇒ 例外
num = Integer.valueOf("0100");

// ⇒ 10進数と評価されるので「100」
num = Integer.valueOf("FF", 16);

// ⇒ 16進数として評価されるので「255」
num = Integer.valueOf("FF"); // ⇒ 例外
num = Integer.getInteger("100"); // ⇒ 例外。


まとめると、
decode は、文字列に 0x や # 、 0 をつけることで、16進数や8進数と解釈して変換してくれる。
parseInt(と valueOf) は、文字列だけ渡す場合は10進数として解釈される。# や 0x は使えない。16進、8進として認識したい場合は radix 引数を使う。
ということのようです。


ハマりポイントとしては、"0100" という文字列を渡す時、decode("0100") では8進数と解釈して「64」を返すのに対し、parseInt("0100") では、10進数として解釈され「100」が返されるところです。
渡すデータが 0 で埋められている場合(どんな場合だ?)には要注意ですね。


とりあえず parseInt を使っとけば安心、おっとクラスによってメソッド名が変わっちゃうのが気に入らないから valueOf 使っとけばいいか。
decode の方が仕事が多そうなので遅そうですしね。

スポンサーサイト
【2010/10/02 13:32】 Android| tb(0) cm(0)
タグ : Android Java
<<IS03 発表されたよ、どうすんの? | ホーム | こんな IS03 なら即買い!>>
コメント
コメントの投稿

管理者にだけ表示を許可する

トラックバック
トラックバックURL
http://oku2006.blog43.fc2.com/tb.php/1605-02de8e38
| ホーム |
アクセスランキング
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。