1. 奇数を見つける:
public static boolean isOdd(int i){ return i % 2 == 1; }
上記の方法は本当にすべての奇数を見つけることができますか?
A: 負の数の問題は考慮されません。i が負の場合、それは不正解です。 i%2 == 0
2 を返す必要があります。浮動小数点減算
System.out.println(2.0-1.9);
A: Java の単純な浮動小数点型 float および double は演算できません。 Java だけでなく、他の多くのプログラミング言語にもこの問題があります。ほとんどの場合、計算結果は正確ですが、何度か試行すると (ループを作成できます)、上記のようなエラーが発生する可能性があります。もちろん、加算、減算、乗算、除算で問題が発生する可能性があります。例:
System.out.println(0.05+0.01); System.out.println(1.0-0.42); System.out.println(4.015*100); System.out.println(123.3/100);
これは、桁数が限られた一部の小数が、浮動小数点では表現できない 2 進数で無限に繰り返される小数になる可能性があるためです。数値が大きくなり、精度が損なわれます。
解決策:
1. a-b が c に等しいかどうか、または a+b が c に等しいかどうかを判断したい場合は、
if(0.05+0.01-0.06 < 0.0000001) { }
2 という本に原理が記載されています。 float と double 科学計算または工学計算にのみ使用できます。商用計算では、java.math.BigDecimal を使用して解決する必要があります
System.out.println((new BigDecimal("2.0")).subtract( new BigDecimal("1.9")).doubleValue());
3. 無限ループの理由は次のとおりです。 i が Integer.MAX_VALUE の場合です。 このとき、for ループは最初に ++ を実行し、次に i が負の数になるのは、intがオーバーフローしたためです。ここで、<=END を public static final int END = Integer.MAX_VALUE;
public static final int START = END - 2;
public static void main(String[] args) {
int count = 0;
for (int i = START; i <= END; i++)
count++;
System.out.println(count);
}
A: false を返します。現時点では、return true は到達不可能なステートメントであり、コンパイル段階で最適化されて削除されます。
3. 面接で遭遇する可能性のある罠の質問を共有しましょう
コードを見てください:
public static boolean decision() { try { return true; } finally { return false; } }
出力結果は次のとおりです:
A 上記の答えはどれもありません。は正しい。int a=5; System.out.println("value is"+((a<5)? 10.9:9 ));
value is9.0
StringBuffer str1=new StringBuffer("123"); StringBuffer str2=new StringBuffer("123"); if(str1.equals(str2)){ System.out.println("str1.equalstr2"); }else{ System.out.println("str1.notequalstr2"); }
Float fa=new Float(0.9f); Float fb=new Float(0.9f); //Float fb=new Float("0.9f"); Double db=new Double(0.9f); if(fa==fb){ //false System.out.println("fa==fb"); }else{ System.out.println("fa!=fb"); } if(fa.equals(fb)){ //true System.out.println("fa.equalfb"); }else{ System.out.println("fa!equalfb"); } if(db.equals(fb)){ //false System.out.println("db.equalfb"); }else{ System.out.println("db!equalfb"); }
他に何かありましたら、追加してください。
参考:
1. http://blog.csdn.net/ol_beta/article/details/5598867
2. http://zhidao.baidu.com/link?url=0UyDU42L7DXZitdydJMG3IIUDIf3xidFCRAObZAq6SHFCEaNnp2Oyuq1K V wBvmlR0UZGHSjD4f6A1yD0d65JL_
3. http://bbs.csdn.net/topics/300023952
4. http://z466459262.iteye.com/blog/739300
概要
以上がこの記事の内容となります。この記事は誰にとっても役立ちます。あなたの勉強や仕事に役立つでしょう。ご質問がある場合は、メッセージを残して連絡してください。
Java の一般的なトラップの質問と回答に関連するその他の記事については、PHP 中国語 Web サイトに注目してください。