Heim  >  Artikel  >  Java  >  Häufige Fragen und Antworten zu Fallen in Java

Häufige Fragen und Antworten zu Fallen in Java

高洛峰
高洛峰Original
2017-01-16 16:20:181661Durchsuche

1. Ungerade Zahlen finden:

public static boolean isOdd(int i){
 return i % 2 == 1;
 }

Kann die obige Methode wirklich alle ungeraden Zahlen finden?

A: Das Problem der negativen Zahlen wird nicht berücksichtigt. Wenn i negativ ist, ist es falsch. Sollte i%2 == 0 zurückgeben

2. Gleitkommasubtraktion

System.out.println(2.0-1.9);

A: Die einfachen Gleitkommatypen float und double in Java können nicht betrieben werden. Nicht nur Java, sondern auch viele andere Programmiersprachen haben dieses Problem. In den meisten Fällen sind die Berechnungsergebnisse korrekt, aber wenn Sie es ein paar Mal versuchen (Sie können eine Schleife erstellen), können Sie Fehler wie die oben genannten machen. Natürlich kann es bei Addition, Subtraktion, Multiplikation und Division zu Problemen kommen.

Zum Beispiel:

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);

Dies liegt daran, dass einige Dezimalzahlen mit einer begrenzten Anzahl von Stellen zu unendlich wiederkehrenden Dezimalzahlen werden können Binärzahlen können nicht dargestellt werden und die Genauigkeit ist beeinträchtigt.

Lösung:

1. Wenn Sie feststellen möchten, ob a-b gleich c ist oder ob a+b gleich c ist, können Sie

if(0.05+0.01-0.06 < 0.0000001)
{
}

verwenden 2. In „Effektiv“ Ein im Buch „Java“ erwähntes Prinzip ist, dass Float und Double nur für wissenschaftliche Berechnungen oder technische Berechnungen verwendet werden können. In kommerziellen Berechnungen müssen wir java.math.BigDecimal verwenden, um

System.out.println((new BigDecimal("2.0")).subtract(
 new BigDecimal("1.9")).doubleValue());
3 . Endlosschleife

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: Der Grund für die Endlosschleife hier ist, dass, wenn i gleich Integer.MAX_VALUE ist, die for-Schleife zuerst ++ ist und dann bestimmt, ob i < ist ;=END. Wenn i eine ganze Zahl ist. Wenn .MAX_VALUE in ++ geändert wird, wird i zu einer negativen Zahl. Der Zyklus geht also weiter.

Der Grund, warum es eine negative Zahl wird, ist, dass int überläuft. Hier kann das Problem durch Ändern von <=END in

4. Was genau wird zurückgegeben?

public static boolean decision() {
 try {
 return true;
 } finally {
 return false;
 }
}
A: Rückgabe falsch. Zu diesem Zeitpunkt ist return true eine nicht erreichbare Anweisung und wird während der Kompilierungsphase optimiert und entfernt.

3. Lassen Sie uns einige Fallenfragen teilen, auf die Sie in Interviews stoßen könnten

Sehen Sie sich den Code an:

int a=5;
  System.out.println("value is"+((a<5)? 10.9:9 ));
Das Ausgabeergebnis ist:


A. Kompilierungsfehler B10.9 C.9 D Keine der oben genannten Antworten ist richtig.


Das Ausführungsergebnis ist:

value is9.0
Weil ((a<5) ? 10.9) es eine 10.9java-automatische Transformation gibt, die auf der Operatorgenauigkeit basiert. Daher werden die folgenden 9 auch zu 9.0.


Wählen Sie also D.


a

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");
  }


Das Ergebnis ist: str1.notequalsstr2 Dies zeigt, dass StringBuffer die Methode equals nicht überschreibt.

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");
  }
Das Ergebnis ist:

fa!=fb
fa.equalfb
db!equalfb Float 型与Double 型肯定不相等
Wenn Sie noch etwas haben, können Sie es gerne hinzufügen.

Referenz:

1. http://blog.csdn.net/ol_beta/article/details/5598867


2. baidu.com/link?url=0UyDU42L7DXZitdydJMG3IIUDIf3xidFCRAObZAq6SHFCEaNnp2Oyuq1KVwBvmlR0UZGHSjD4f6A1yD0d65JL_

3. http://bbs.csdn.net/topics/300023952

4. http://z466459262.iteye.com/blog/ 739300

Zusammenfassung

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels für das Studium oder die Arbeit von Nutzen sein kann Hinterlassen Sie eine Nachricht, um zu kommunizieren.

Weitere Artikel zu häufigen Fallenfragen und -antworten in Java finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn