


5-String-Interviewfragen, weniger als 10 % der Leute k?nnen sie alle richtig beantworten! (mit Antwort)
Aug 23, 2023 pm 02:49 PMWerfen wir einen Blick auf diesen Artikel über 5 Interviewfragen in der Kategorie Java String
Java String
類的 5 道面試題,這五道題,我自己在面試過(guò)程中親身經(jīng)歷過(guò)幾道題目,本篇就帶你了解這些題的答案為什么是這樣。
st1和st2是否相等?
public class Demo2_String { public static void main(String[] args) { String st1 = "abc"; String st2 = "abc"; System.out.println(st1 == st2); System.out.println(st1.equals(st2)); } }
輸出結(jié)果:
第一行:true 第二行:true
分析
先看第一個(gè)打印語(yǔ)句,在Java中==
這個(gè)符號(hào)是比較運(yùn)算符,它可以基本數(shù)據(jù)類型和引用數(shù)據(jù)類型是否相等,如果是基本數(shù)據(jù)類型,==
比較的是值是否相等,如果是引用數(shù)據(jù)類型,==
. Ich habe pers?nlich mehrere dieser fünf Fragen w?hrend des Interviewprozesses erlebt. Dieser Artikel wird Ihnen helfen zu verstehen, warum die Antworten auf diese Fragen so sind.
String st1 = new String(“abc”);??Ausgabeergebnis: ??
Erste Zeile: true Zweite Zeile: true
==
Dieses Symbol ist ein Vergleichsoperator, der bestimmen kann, ob der Basisdatentyp und der Referenzdatentyp gleich sind. Wenn es sich um einen Basisdatentyp handelt, ==
vergleicht, ob die Werte gleich sind. Wenn es sich um Referenzdatentypen handelt, ==
vergleicht, ob die Speicheradressen von zwei Objekte sind gleich. ????Strings geh?ren nicht zu den 8 Grunddatentypen. Oben wird ?abc“ gleichzeitig den beiden String-Objekten st1 und st2 zugewiesen, die auf dieselbe Adresse verweisen 1. Das Ausgabeergebnis des ==-Vergleichs in einer print-Anweisung ist wahr
Dann schauen wir uns den Vergleich von ?equals“ in der zweiten print-Anweisung an. Wir wissen, dass ?equals“ eine Methode der übergeordneten Klasse ?Object“ ist und diese ?equals“-Methode in der String-Klasse überschrieben wird. ??????在JDK API 1.6文檔中找到String類下的equals方法,點(diǎn)擊進(jìn)去可以看到這么一句話“將此字符串與指定的對(duì)象比較。當(dāng)且僅當(dāng)該參數(shù)不為null,并且是與此對(duì)象表示相同字符序列的String 對(duì)象時(shí),結(jié)果才為 true?!?注意這個(gè)相同字符序列,在后面介紹的比較兩個(gè)數(shù)組,列表,字典是否相等,都是這個(gè)邏輯去寫代碼實(shí)現(xiàn)。
由于st1和st2的值都是“abc”,兩者指向同一個(gè)對(duì)象,當(dāng)前字符序列相同,所以第二行打印結(jié)果也為true。下面我們來(lái)畫一個(gè)內(nèi)存圖來(lái)表示上面的代碼,看起來(lái)更加有說(shuō)服力。
內(nèi)存過(guò)程大致如下:
1)運(yùn)行先編譯,然后當(dāng)前類Demo2_String.class文件加載進(jìn)入內(nèi)存的方法區(qū)
2)第二步,main方法壓入棧內(nèi)存
3)常量池創(chuàng)建一個(gè)“abc”對(duì)象,產(chǎn)生一個(gè)內(nèi)存地址
4)然后把“abc”內(nèi)存地址賦值給main方法里的成員變量st1,這個(gè)時(shí)候st1根據(jù)內(nèi)存地址,指向了常量池中的“abc”。
5)前面一篇提到,常量池有這個(gè)特點(diǎn),如果發(fā)現(xiàn)已經(jīng)存在,就不在創(chuàng)建重復(fù)的對(duì)象
6)運(yùn)行到代碼 Stringst2 =”abc”, 由于常量池存在“abc”,所以不會(huì)再創(chuàng)建,直接把“abc”內(nèi)存地址賦值給了st2
7)最后st1和st2都指向了內(nèi)存中同一個(gè)地址,所以兩者是完全相同的。
到底創(chuàng)建了幾個(gè)對(duì)象?
String st1 = new String(“abc”);
答案是:在內(nèi)存中創(chuàng)建兩個(gè)對(duì)象,一個(gè)在堆內(nèi)存,一個(gè)在常量池,堆內(nèi)存對(duì)象是常量池對(duì)象的一個(gè)拷貝副本。
分析
我們下面直接來(lái)一個(gè)內(nèi)存圖。
當(dāng)我們看到了new這個(gè)關(guān)鍵字,就要想到,new出來(lái)的對(duì)象都是存儲(chǔ)在堆內(nèi)存。然后我們來(lái)解釋堆中對(duì)象為什么是常量池的對(duì)象的拷貝副本。
“abc”屬于字符串,字符串屬于常量,所以應(yīng)該在常量池中創(chuàng)建,所以第一個(gè)創(chuàng)建的對(duì)象就是在常量池里的“abc”。
第二個(gè)對(duì)象在堆內(nèi)存為啥是一個(gè)拷貝的副本呢,這個(gè)就需要在JDK API 1.6找到String(String original)這個(gè)構(gòu)造方法的注釋:初始化一個(gè)新創(chuàng)建的 String 對(duì)象,使其表示一個(gè)與參數(shù)相同的字符序列;換句話說(shuō),新創(chuàng)建的字符串是該參數(shù)字符串的副本。所以,答案就出來(lái)了,兩個(gè)對(duì)象。
st1和st2是否相等?
package string; public class Demo2_String { public static void main(String[] args) { String st1 = new String("abc"); String st2 = "abc"; System.out.println(st1 == st2); System.out.println(st1.equals(st2)); } }
答案:false 和 true 由于有前面兩道題目?jī)?nèi)存分析的經(jīng)驗(yàn)和理論,所以,我能快速得出上面的答案。
==比較的st1和st2對(duì)象的內(nèi)存地址,由于st1指向的是堆內(nèi)存的地址,st2看到“abc”已經(jīng)在常量池存在,就不會(huì)再新建,所以st2指向了常量池的內(nèi)存地址,所以==判斷結(jié)果輸出false,兩者不相等。
第二個(gè)equals比較,比較是兩個(gè)字符串序列是否相等,由于就一個(gè)“abc”,所以完全相等。
內(nèi)存圖如下
st1和st2是否相等?
public class Demo2_String { public static void main(String[] args) { String st1 = "a" + "b" + "c"; String st2 = "abc"; System.out.println(st1 == st2); System.out.println(st1.equals(st2)); } }
答案是:true 和 true 分析:“a”,”b”,”c”三個(gè)本來(lái)就是字符串常量,進(jìn)行+符號(hào)拼接之后變成了“abc”,“abc”本身就是字符串常量(Java中有常量?jī)?yōu)化機(jī)制),所以常量池立馬會(huì)創(chuàng)建一個(gè)“abc”的字符串常量對(duì)象,在進(jìn)行st2=”abc”,這個(gè)時(shí)候,常量池存在“abc”,所以不再創(chuàng)建。所以,不管比較內(nèi)存地址還是比較字符串序列,都相等。
判斷一下st2和st3是否相等
public class Demo2_String { public static void main(String[] args) { String st1 = "ab"; String st2 = "abc"; String st3 = st1 + "c"; System.out.println(st2 == st3); System.out.println(st2.equals(st3)); } }
答案:
false
false
true
Analyse
Die erste Antwort oben ist falsch, die zweite ist wahr und die zweite ist wahr. Wir k?nnen es leicht verstehen, weil einer der Vergleiche ?abc“ ist und der andere ?abc“ ist, der durch Splei?en erhalten wird, also der Gleichheitsvergleich , das ist die Ausgabe wahr, wir verstehen es sehr gut. Warum das erste Urteil falsch ist, sind wir verwirrt. In ?hnlicher Weise erkl?ren wir im Folgenden anhand von API-Kommentaren und Speicherdiagrammen, warum dies nicht gleich ist.?ffnen Sie zun?chst die Einführung von String in JDK API 1.6 und suchen Sie den Satz im Bild unten.
Der obige Kommentar erkl?rt, dass das Prinzip dieses Splei?ens darin besteht, dass die StringBuilder- oder StringBuffer-Klasse und die darin enthaltene Append-Methode das Splei?en implementieren und dann toString () aufrufen, um das gesplei?te Objekt in ein String-Objekt umzuwandeln und schlie?lich die Adresse zuzuweisen des String-Objekts in eine Variable. Basierend auf diesem Verst?ndnis zeichnen wir ein Speicherdiagramm zur Analyse.
Zusammenfassung
Diese Interviewfrage erfordert die Beherrschung einiger Anmerkungen und Prinzipien in der JDK-API sowie der Speicherdiagrammanalyse, um die richtigen Ergebnisse zu erhalten. Ich gebe zu, dass mir das Zeichnen des Speicherdiagramms geholfen hat, das zu verstehen Antwort. Warum ist das so?
Das obige ist der detaillierte Inhalt von5-String-Interviewfragen, weniger als 10 % der Leute k?nnen sie alle richtig beantworten! (mit Antwort). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Hei?e KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?er Artikel

Hei?e Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Sie müssen Spring kennen, also lassen Sie uns über die Reihenfolge aller Benachrichtigungen von Aop sprechen. Wie wirkt sich Spring Boot oder Spring Boot 2 auf die Ausführungsreihenfolge von Aop aus? Erz?hlen Sie uns von den Fallstricken, auf die Sie bei AOP gesto?en sind?

OOM bedeutet, dass im Programm eine Sicherheitslücke vorliegt, die durch den Code oder die JVM-Parameterkonfiguration verursacht werden kann. In diesem Artikel erfahren die Leser, wie sie Fehler beheben k?nnen, wenn ein Java-Prozess OOM ausl?st.

Untersch?tzen Sie nicht die schriftlichen Prüfungsfragen vieler Unternehmen. Es gibt Fallstricke, in die Sie versehentlich geraten k?nnen. Wenn Sie auf eine solche schriftliche Testfrage zu Zyklen sto?en, empfehle ich Ihnen, ruhig zu denken und Schritt für Schritt vorzugehen.

Letzte Woche ging ein Freund aus der Gruppe zu einem Interview mit Ping An Insurance. Das Ergebnis war etwas bedauerlich, aber ich hoffe, Sie lassen sich nicht entmutigen, im Grunde genommen alle Fragen, auf die Sie sto?en Das Interview kann durch Auswendiglernen der Interviewfragen gel?st werden, also arbeiten Sie bitte hart!

?In diesem Artikel werden fünf Interviewfragen zur Java-String-Klasse behandelt. Ich habe w?hrend des Interviewprozesses mehrere dieser fünf Fragen pers?nlich erlebt. Dieser Artikel wird Ihnen helfen zu verstehen, warum die Antworten auf diese Fragen so sind.

Das Extrakapitel der Java-Concurrent-Programming-Reihe, C A S (Compare and swap), ist nach wie vor in einem leicht verst?ndlichen Stil mit Bildern und Texten gehalten und erm?glicht den Lesern eine verrückte Konversation mit dem Interviewer.

Die Datenstruktur von Java steht im Mittelpunkt des Interviews. Jeder, der an einem Java-Interview teilgenommen hat, muss über einige Erfahrung verfügen. Wenn Interviewer solche Fragen stellen, m?chten sie oft überprüfen, ob Sie die zugrunde liegenden Strukturen h?ufig verwendeter Datentypen in Java studiert haben, anstatt einfach auf der Ebene des ?Wissens, wie man sie verwendet“ zu bleiben.

Wenn wir eine Klasse verwenden m?chten, müssen wir die Klasse über ClassLoader in den Speicher laden.
