Maison >Java >javaDidacticiel >Questions et réponses sur les pièges courants en Java

Questions et réponses sur les pièges courants en Java

高洛峰
高洛峰original
2017-01-16 16:20:181706parcourir

1. Trouver les nombres impairs :

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

La méthode ci-dessus peut-elle vraiment trouver tous les nombres impairs ?

A : Le problème des nombres négatifs n'est pas pris en compte. Si i est négatif, il est incorrect. Doit renvoyer i%2 == 0

2. Soustraction à virgule flottante

System.out.println(2.0-1.9);

A : Les types à virgule flottante simples float et double en Java ne peuvent pas être utilisés. Non seulement Java, mais aussi de nombreux autres langages de programmation ont ce problème. Dans la plupart des cas, les résultats du calcul sont précis, mais si vous essayez plusieurs fois (vous pouvez faire une boucle), vous pouvez commettre des erreurs comme celle ci-dessus. Bien sûr, il peut y avoir des problèmes avec l'addition, la soustraction, la multiplication et la division

Par exemple :

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

En effet, certaines décimales avec un nombre limité de chiffres peuvent devenir des décimales infiniment récurrentes. en binaire. Les nombres à virgule flottante ne peuvent pas être représentés et la précision est compromise.

Solution :

1. Si vous souhaitez déterminer si a-b est égal à c, ou si a b est égal à c, vous pouvez utiliser

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

2. Dans "Effective Java" Un principe mentionné dans ce livre est que float et double ne peuvent être utilisés que pour des calculs scientifiques ou techniques. Dans les calculs commerciaux, nous devons utiliser java.math.BigDecimal pour résoudre

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

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 : La raison de la boucle infinie ici est que lorsque i est Integer.MAX_VALUE, la boucle for détermine d'abord si i est <=END, puis quand i est Integer.MAX_VALUE , i devient un nombre négatif. Le cycle continue donc.

La raison pour laquelle il devient un nombre négatif est que int déborde. Ici, changer <=END en

4. Qu'est-ce qui est retourné exactement ?

public static boolean decision() {
 try {
 return true;
 } finally {
 return false;
 }
}
A : Renvoyer faux. Pour le moment, return true est une instruction inaccessible et sera optimisée et supprimée lors de la phase de compilation.

3. Partageons quelques questions pièges que vous pourriez rencontrer lors des entretiens

Regardez le code :

int a=5;
  System.out.println("value is"+((a<5)? 10.9:9 ));
Le résultat de sortie est :


A. Erreur de compilation B10.9 C.9 D Aucune des réponses ci-dessus n'est correcte.


Le résultat de l'exécution est :

value is9.0
Parce que ((a<5) ? 10.9) il existe une transformation automatique Java 10.9 basée sur la précision de l'opérateur. Par conséquent, le 9 suivant deviendra également 9,0.


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


Le résultat est : str1.notequalsstr2 Cela montre que StringBuffer ne remplace pas la méthode égale.

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");
  }
Le résultat est :

fa!=fb
fa.equalfb
db!equalfb Float 型与Double 型肯定不相等
Si vous avez autre chose, n'hésitez pas à l'ajouter.

Référence :

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


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

3. 🎜>4. http://z466459262.iteye.com/blog/ 739300

Résumé

Ce qui précède est l'intégralité du contenu de cet article. J'espère que le contenu de cet article pourra apporter de l'aide aux études ou au travail de chacun. Si vous avez des questions, vous pouvez partir. un message à communiquer.

Pour plus d'articles sur les questions et réponses aux pièges courants en Java, veuillez faire attention au site Web PHP chinois !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn