1. Was ist der Unterschied zwischen JDK und JRE?
JDK: Die Abkürzung für Java Development Kit, Java Development Tool Kit, stellt eine Java-Entwicklungsumgebung und eine Laufumgebung bereit.
JRE: Die Abkürzung für Java Runtime Environment, Java Runtime Environment, stellt die erforderliche Umgebung für den Betrieb von Java bereit.
Insbesondere umfasst JDK tatsächlich JRE, den Compiler javac, der Java-Quellcode kompiliert, und viele Tools zum Debuggen und Analysieren von Java-Programmen. Einfach ausgedrückt: Wenn Sie Java-Programme ausführen müssen, müssen Sie nur JRE installieren. Wenn Sie Java-Programme schreiben müssen, müssen Sie JDK installieren.
(Verwandtes Tutorial: Häufige Java-Interviewfragen)
2. Was ist der Unterschied zwischen == und equal?
== Interpretation
hat unterschiedliche Auswirkungen auf Basistypen und Referenztypen ==, wie folgt:
Basistypen: Was verglichen wird, ist, ob die Werte die sind gleich;
Referenztyp: Der Vergleich besteht darin, ob die Referenzen gleich sind.
Codebeispiel:
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
Codeinterpretation: Da x und y auf dieselbe Referenz verweisen, == ist ebenfalls wahr, und die neue String()-Methode wird umgeschrieben, um Speicherplatz freizugeben, sodass das Ergebnis von == falsch ist und gleich immer Werte vergleicht, sodass alle Ergebnisse wahr sind.
Gleichheitsinterpretation
Gleichheit ist im Wesentlichen ==, mit der Ausnahme, dass String und Ganzzahl die Gleichheitsmethode überschreiben und sie in einen Wertevergleich umwandeln. Schauen Sie sich zum Verständnis einfach den folgenden Code an.
Schauen wir uns zunächst an, wie equal standardmäßig Objekte mit demselben Wert vergleicht. Der Code lautet wie folgt:
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
Das Ausgabeergebnis übertrifft unsere Erwartungen, es ist falsch? Was ist los? Sie werden es wissen, nachdem Sie den Quellcode von equal gelesen haben. Der Quellcode lautet wie folgt:
public boolean equals(Object obj) { return (this == obj); }
Es stellt sich heraus, dass equal im Wesentlichen == ist.
Die Frage ist, warum zwei String-Objekte mit demselben Wert true zurückgeben? Der Code lautet wie folgt:
String s1 = new String("老王"); String s2 = new String("老王"); System.out.println(s1.equals(s2)); // true
Wenn wir die Equals-Methode von String eingeben, finden wir die Antwort. Der Code lautet wie folgt:
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; }
Es stellt sich heraus, dass String die Equals überschreibt Methode von Object und ändert den Referenzvergleich. Es wird ein Wertevergleich.
Zusammenfassung: == ist ein Wertevergleich für Basistypen und für Referenztypen ist es ein Referenzvergleich; und equal ist standardmäßig ein Referenzvergleich, aber viele Klassen haben die equal-Methode neu gestaltet, wie z. B. String , Ganzzahl usw. wandeln es in einen Wertevergleich um, sodass unter normalen Umständen gleich vergleicht, ob die Werte gleich sind.
(Empfohlenes Lernen: Java Quick Start)
3. Wenn der hashCode() zweier Objekte gleich ist, muss equal() auch wahr sein, oder?
Nein, der hashCode() der beiden Objekte ist derselbe und equal() ist möglicherweise nicht wahr.
Codebeispiel:
String str1 = "通话"; String str2 = "重地"; System.out.println(String.format("str1:%d | str2:%d", str1.hashCode(),str2.hashCode())); System.out.println(str1.equals(str2));
Ergebnis der Ausführung:
Codeinterpretation: Es ist offensichtlich, dass der HashCode von „call“ und „ Heavy Place“( ) sind gleich, aber equal() ist falsch, da in einer Hash-Tabelle hashCode() gleich ist, was bedeutet, dass die Hash-Werte zweier Schlüssel-Wert-Paare gleich sind. Wenn jedoch der Hash Wenn die Werte gleich sind, bedeutet dies nicht unbedingt, dass die Schlüssel-Wert-Paare gleich sind.
4. Welche Rolle spielt final in Java?
Die durch final geänderte Klasse wird als finale Klasse bezeichnet und diese Klasse kann nicht vererbt werden.
Endgültig geänderte Methoden können nicht überschrieben werden.
Endgültig geänderte Variablen werden als Konstanten bezeichnet. Nach der Initialisierung kann der Wert nicht geändert werden.
5. Was ist Math.round(-1.5) in Java?
ist gleich -1, da beim Aufnehmen von Werten auf der Zahlenachse der mittlere Wert (0,5) nach rechts gerundet wird, sodass positive 0,5 aufgerundet werden und negative 0,5 direkt verworfen werden.
6. Ist String ein grundlegender Datentyp?
String ist kein Basistyp. Es gibt 8 Basistypen: Byte, Boolean, Char, Short, Int, Float, Long, Double und String ist ein Objekt.
7. Welche Klassen gibt es zum Betreiben von Strings in Java? Was ist der Unterschied zwischen ihnen?
Zu den Klassen, die mit Strings arbeiten, gehören: String, StringBuffer und StringBuilder.
Der Unterschied zwischen String und StringBuffer und StringBuilder besteht darin, dass String ein unveränderliches Objekt deklariert. Jede Operation generiert ein neues String-Objekt und zeigt dann den Zeiger auf das neue String-Objekt, während StringBuffer und StringBuilder in verwendet werden können Die Operation wird auf Basis des Originalobjekts ausgeführt. Daher ist es am besten, String nicht zu verwenden, wenn sich der Inhalt der Zeichenfolge häufig ändert.
Der größte Unterschied zwischen StringBuffer und StringBuilder besteht darin, dass StringBuffer threadsicher ist, während StringBuilder nicht threadsicher ist. Die Leistung von StringBuilder ist jedoch höher als die von StringBuffer. Daher wird empfohlen, StringBuilder einzeln zu verwenden -Threaded-Umgebung und in einer Multithread-Umgebung wird die Verwendung von StringBuffer empfohlen.
8. Ist String str="i" dasselbe wie String str=new String("i")?
Es ist anders, weil die Speicherzuweisungsmethode anders ist. String str="i" wird von der Java Virtual Machine dem Konstantenpool zugewiesen und String str=new String("i") wird dem Heap-Speicher zugewiesen.
9. Wie kann man eine Zeichenfolge umkehren?
使用 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视频教程
Das obige ist der detaillierte Inhalt vonFragen zum neuen Java-Interview 2020 – Grundlegender Teil (1). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!