Maison  >  Article  >  Java  >  Questions d'entretien sur les nouvelles Java 2020 - Partie de base (1)

Questions d'entretien sur les nouvelles Java 2020 - Partie de base (1)

王林
王林avant
2020-03-31 16:03:482697parcourir

Questions d'entretien sur les nouvelles Java 2020 - Partie de base (1)

1. Quelle est la différence entre JDK et JRE ?

JDK : l'abréviation de Java Development Kit, kit d'outils de développement Java, fournit un environnement de développement Java et un environnement d'exécution.

JRE : L'abréviation de Java Runtime Environment, Java Runtime Environment, fournit l'environnement requis pour le fonctionnement de Java.

Plus précisément, JDK inclut en fait JRE, le compilateur javac qui compile le code source Java, et de nombreux outils de débogage et d'analyse des programmes Java. Pour faire simple : si vous devez exécuter des programmes Java, il vous suffit d'installer JRE. Si vous devez écrire des programmes Java, vous devez installer JDK.

(Tutoriel associé : Questions d'entretien Java courantes)

2. Quelle est la différence entre == et égal ?

== L'interprétation

a des effets différents sur les types de base et les types de référence ==, comme suit :

Types de base : Ce qui est comparé est de savoir si les valeurs sont les identique ;

Type de référence : la comparaison consiste à savoir si les références sont identiques

Exemple de code :

String x = "string";
String y = "string";
String z = new String("string");
System.out.println(x==y); // true
System.out.println(x==z); // false
System.out.println(x.equals(y)); // true
System.out.println(x.equals(z)); // true

Interprétation du code : Parce que x et y pointent vers la même référence ; == est également vrai, et la nouvelle méthode String() est réécrite pour ouvrir de l'espace mémoire, donc le résultat de == est faux et égal compare toujours les valeurs, donc les résultats sont tous vrais.

interprétation égale

equals est essentiellement ==, sauf que String et Integer remplacent la méthode égale et la transforment en une comparaison de valeurs. Regardez simplement le code ci-dessous pour comprendre.

Regardons d'abord comment égal compare les objets avec la même valeur par défaut. Le code est le suivant :

class Cat {
    public Cat(String name) {
        this.name = name;
    }
 
    private String name;
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
}
 
Cat c1 = new Cat("王磊");
Cat c2 = new Cat("王磊");
System.out.println(c1.equals(c2)); // false

Le résultat de sortie est au-delà de nos attentes, il est faux ? Que se passe-t-il ? Vous le saurez après avoir lu le code source d'equals. Le code source est le suivant :

public boolean equals(Object obj) {
    return (this == obj);
}

Il s'avère que equals est essentiellement ==.

La question est : pourquoi deux objets String avec la même valeur renvoient-ils vrai ? Le code est le suivant :

String s1 = new String("老王");
String s2 = new String("老王");
System.out.println(s1.equals(s2)); // true

De même, lorsque nous entrons dans la méthode égale de String, nous trouvons la réponse :

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = value.length;
        if (n == anotherString.value.length) {
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = 0;
            while (n-- != 0) {
                if (v1[i] != v2[i])
                    return false;
                i++;
            }
            return true;
        }
    }
    return false;
}

Il s'avère que String remplace les égaux. méthode de Object et modifie la comparaison de référence. Cela devient une comparaison de valeurs.

Résumé : == est une comparaison de valeurs pour les types de base, et pour les types référence, c'est une comparaison de référence et égal est une comparaison de référence par défaut, mais de nombreuses classes ont repensé la méthode égale, comme String. , Entier, etc., transformez-le en une comparaison de valeurs, donc dans des circonstances normales, égal compare si les valeurs sont égales.

(Apprentissage recommandé : Java Quick Start)

3 Si le hashCode() de deux objets est le même, equals() doit également être vrai, n'est-ce pas ?

Non, le hashCode() des deux objets est le même et equals() peut ne pas être vrai.

Exemple de code :

String str1 = "通话";
String str2 = "重地";
System.out.println(String.format("str1:%d | str2:%d",  str1.hashCode(),str2.hashCode()));
System.out.println(str1.equals(str2));

Résultat de l'exécution :

Questions dentretien sur les nouvelles Java 2020 - Partie de base (1)

Interprétation du code : Il est évident que le hashCode de "call" et " heavy place"( ) sont identiques, mais equals() est faux, car dans une table de hachage, hashCode() est égal, ce qui signifie que les valeurs de hachage de deux paires clé-valeur sont égales. Cependant, si le hachage les valeurs sont égales, cela ne signifie pas nécessairement que les paires clé-valeur sont égales.

4. Quel est le rôle de final en java ?

La classe modifiée par final est appelée la classe finale, et cette classe ne peut pas être héritée.

Les méthodes finales modifiées ne peuvent pas être remplacées.

Les variables finales modifiées sont appelées constantes. Les constantes doivent être initialisées. Après l'initialisation, la valeur ne peut pas être modifiée.

5. À quoi est égal Math.round(-1.5) en Java ?

est égal à -1, car lors de la prise de valeurs sur l'axe des nombres, la valeur du milieu (0,5) est arrondie à droite, donc le positif 0,5 est arrondi à l'unité supérieure et le négatif 0,5 est directement écarté.

6. String est-il un type de données de base ?

String n'est pas un type de base. Il existe 8 types de base : byte, boolean, char, short, int, float, long, double et String est un objet.

7. Quelles sont les classes pour les chaînes d'exploitation en Java ? Quelle est la différence entre eux ?

Les classes qui opèrent sur les chaînes incluent : String, StringBuffer et StringBuilder.

La différence entre String et StringBuffer et StringBuilder est que String déclare un objet immuable. Chaque opération générera un nouvel objet String puis pointera le pointeur vers le nouvel objet String, tandis que StringBuffer et StringBuilder peuvent être utilisés dans le objet original. L'opération est effectuée sur la base de , il est donc préférable de ne pas utiliser String lorsque le contenu de la chaîne est fréquemment modifié.

La plus grande différence entre StringBuffer et StringBuilder est que StringBuffer est thread-safe, tandis que StringBuilder n'est pas thread-safe, mais les performances de StringBuilder sont supérieures à celles de StringBuffer, il est donc recommandé d'utiliser StringBuilder en un seul -threaded et dans un environnement multithread. Il est recommandé d'utiliser StringBuffer.

8. String str="i" est-il identique à String str=new String("i") ?

C'est différent car la méthode d'allocation de mémoire est différente. String str="i", la machine virtuelle Java l'attribuera au pool de constantes ; et String str=new String("i") sera alloué à la mémoire tas.

9. Comment inverser une chaîne ?

使用 StringBuilder 或者 stringBuffer 的 reverse() 方法。

示例代码:

// StringBuffer reverse
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("abcdefg");
System.out.println(stringBuffer.reverse()); // gfedcba
// StringBuilder reverse
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("abcdefg");
System.out.println(stringBuilder.reverse()); // gfedcba

10、String 类的常用方法都有那些?

indexOf():返回指定字符的索引。

charAt():返回指定索引处的字符。

replace():字符串替换。

trim():去除字符串两端空白。

split():分割字符串,返回一个分割后的字符串数组。

getBytes():返回字符串的 byte 类型数组。

length():返回字符串长度。

toLowerCase():将字符串转成小写字母。

toUpperCase():将字符串转成大写字符。

substring():截取字符串。

equals():字符串比较。

相关视频教程推荐:java视频教程

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer