Java常用API x易中招のいくつかの大きな穴

1896 ワード

1. int i =10;
Math.round(i) == i ?=>90%以上の場合は等しくなく、round()パラメータはfloat型であるため、round(0)はパラメータをfloatに引き上げ、さらに四捨五入して精度を失う.
2.(?(?):()を使うときは、できるだけ違うタイプで混ぜて使わないようにすると、予期せぬ結果になります.
この場合if,elseを使うべきです
3. Math.abs()はいつでも負数ではないように見えますが、実際にはパラメータが-2174483648の場合、結果は-2174483648です. 
4.in.skip()は、すべての時点で正常にスキップされるわけではありません.パラメータが10*1024または大きい場合、どこへスキップしたのか分かりません.このAPIを使用する場合に戻り値を加えて判断するべきです.
5.単例モードを書くときは、クラスの最初から使わないでください.
public static final MYClass obj = new MYClass();
これにより再帰が形成され、インスタンス化されません.使用時も空ポインタ異常です.
クラスの最後に初期化するか、getxx()で再初期化する必要があります.
クラスで初期化する必要がある場合は、この行が他の静的メンバーの初期化後に書かれていることを確認します.
e.g. 
public static final String name = "xx“;
public static final MYClass obj = new MYClass();
6. 
assertEqualsが正しい場合は印刷されません.
異常時は以下の方法で行います.
try {            
assertEquals(2, number);      
  }
catch(Error e)
{          
 error = e;      
 }
catch(Exception e)
{            
exception = e;      
 } 
7.mapのkey、またはSetの要素としてURLを使用しないでください.
URLは文字列が違うように見えますが、ip:portに解析すると、同じであれば私たちが予想していたのとは異なる効果が発生します.
URLをmapのkey、またはSetの要素とします.代わりにURIを使ったほうがいいです.
8.SetがSet xxとして定義された場合.
そしてxxにshort要素iを加え、xxからremove(i)を加えると、実はremoveされていません.short、removeがintなので.
remove(Object)はshort iを自動的にintに昇格させ、削除可能なオブジェクトが見つからない.
解決:shortという自動アップグレードされるタイプは避けるべきで、必ず使うならxxを使う.remove(short)i)、そうすれば予想されます.
 
9.[抜粋]http://blog.didispace.com/something-about-YYYY-MM-dd/] YYYYweek-based-yearで、当日の週が属する年で、週は日曜日から土曜日が終わり、今週は年を越えれば、今週は次の年になるということです.だから2019年12月31日にこのような表現で2020年になりました.yyyyが使われたのは2019年だった.
10.RabbitMQでは、メッセージの有効期限は、ミリ秒単位で0<=n<=2^32−1の非負の32ビット整数でなければならない.ここで、2^32-1=4294967295です.この値を超えると有効になりません.したがって、各データ型の境界に注意して使用する必要があります.翟永超先生は出会ったことがある.
http://blog.didispace.com/rabbitmq-deplay-message-max/