FC2ブログ
 

Technology へようこそ
ここは技術者の「経験」と「ノウハウ」のブログです


--年--月--日

スポンサーサイト

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


2008年08月19日

javaで比較

最近、javaでミスをしてしまいました。

javaで変数等の比較を行う場合に
基本データ型(int、char等)については"=="でよいのですが、
基本データ型以外の参照型(String、BigDecimal等)については、
"=="では意図しない結果をもたらします。
Stringではequlas、BigDecimalではcompareToを使用します。

自分のコーディングは以下の通り
001|BigDecimal A = new BigDecimal("0");
002|BigDecimal B = A;
003|
004|if (SQLを発行してレコードが存在したら){
005| B = DBの値;
006|}
007|
008|if (A==B){
009| 結果①
010|}else{
011| 結果②
012|}
このコーディングでは、
4行目のifに該当しない場合は、結果①
4行目のifに該当して、DBの値がゼロ以外の場合は結果②
ここまではいいのですが、
4行目のifに該当して、DBの値がゼロの場合も結果②
になってしまいます。
"=="は変数に代入されている値を比較するので、
falseが返ってしまいます。

正しいコーディングは、以下の通り
008|if (A.compareTo(B)==0){
ちなみにcompareToは、
"A>B"の場合は1、"A=B"の場合は0、"A<B"の場合は-1が返却されます。

[ posted by S.S ]

この記事に対するコメント


この記事に対するコメントの投稿














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



この記事に対するトラックバック
トラックバックURL
http://comfair2.blog24.fc2.com/tb.php/383-a0d86804
この記事にトラックバックする(FC2ブログユーザー)











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