1. Der Unterschied zwischen & und &&
(empfohlene Studie: Java-Interviewfragen )
&-Operator hat zwei Verwendungszwecke:
(1) bitweises UND
(2) logisches UND.
&&-Operator ist eine Kurzschluss-UND-Operation (oder prägnante UND-Operation). Der Unterschied zwischen logischem UND und Kurzschluss-UND ist sehr groß. Obwohl beide erfordern, dass die booleschen Werte auf der linken und rechten Seite des Operators wahr sind, ist der Wert des gesamten Ausdrucks wahr.
&& wird als Kurzschlussoperation bezeichnet, denn wenn der Wert des Ausdrucks links von && falsch ist, wird der Ausdruck rechts direkt kurzgeschlossen und es wird keine Operation ausgeführt. Oftmals müssen wir möglicherweise && anstelle von & verwenden.
Bei der Überprüfung der Benutzeranmeldung wird beispielsweise festgestellt, dass der Benutzername nicht null und keine leere Zeichenfolge ist. Er sollte als username != null &&!username.equals("") geschrieben werden Der &-Operator kann nicht ausgetauscht, geschweige denn verwendet werden, denn wenn die erste Bedingung nicht wahr ist, kann der Gleichheitsvergleich von Zeichenfolgen überhaupt nicht durchgeführt werden, andernfalls wird eine NullPointerException-Ausnahme generiert.
2. Kann die Referenz oder das referenzierte Objekt nicht geändert werden, wenn das Schlüsselwort final zum Ändern einer Variablen verwendet wird?
Wenn Sie das Schlüsselwort final zum Ändern einer Variablen verwenden, bedeutet dies, dass die Referenzvariable nicht geändert werden kann, der Inhalt des Objekts, auf das die Referenzvariable zeigt, jedoch dennoch geändert werden kann.
Beispiel:
public class Test10 { // final修饰基本类型的变量 public static final char CHAR = '中'; // final修饰引用类型的变量 public static final StringBuffer a = new StringBuffer("StringBuffer"); public static void main(String[] args) { // 编译报错,引用不能变 // a = new StringBuffer("hehe"); // 引用变量所指向的对象中的内容还是可以改变的 a.append("xxx"); } public static int method1(final int i) { // i = i + 1;// 编译报错,因为final修饰的是基本类型的变量 return i; } // 有人在定义方法的参数(引用变量)时,可能想采用如下的形式来阻止方法内部修改传进来的参数对象, // 实际上,这是办不到的,在该方法内部任然可以增加如下代码来修改参数对象 public static void method2(final StringBuffer buffer) { buffer.append("buffer");// 编译通过,因为final修饰的是引用类型的变量 } }
3. Was ist der Unterschied zwischen statischen Variablen und Instanzvariablen?
Syntaxunterschied: Statische Variablen müssen mit dem Schlüsselwort static geändert werden, Instanzvariablen jedoch nicht.
Der Unterschied bei laufendem Programm: Statische Variablen sind Klassen untergeordnet und Instanzvariablen sind Objekten untergeordnet.
Instanzvariablen müssen ein Instanzobjekt erstellen und den darin enthaltenen Instanzvariablen wird Speicherplatz zugewiesen, bevor diese Instanzvariable verwendet werden kann.
Statische Variablen sind Klassengrößen, solange das Programm geladen wird In den Bytes des Klassencodes wird der statischen Variablen Speicherplatz zugewiesen und kann verwendet werden.
Zusammenfassend lässt sich sagen, dass Instanzvariablen nach dem Erstellen eines Objekts verwendet werden müssen und statische Variablen direkt über den Klassennamen referenziert werden können.
Hinweis: Die Verwendung von (statischen) statischen Variablen unterliegt ebenfalls Einschränkungen. Variablen in der Klasse können nicht in einer statischen Methode aufgerufen werden. Nach dem Laden der Klasse befindet sich nur eine Variable im Speicher . Ein Speicherplatz, der von allen Instanzobjekten einer Klasse gemeinsam genutzt werden kann.
4. Ist es möglich, eine nicht-statische Methode aus einer statischen Methode heraus aufzurufen?
Nein.
Da nicht statische Methoden mit Objekten verknüpft sind, muss ein Objekt erstellt werden, bevor Methodenaufrufe für das Objekt durchgeführt werden können. Beim Aufruf statischer Methoden ist es nicht erforderlich, ein Objekt zu erstellen und kann direkt aufgerufen werden.
Das heißt, wenn eine statische Methode aufgerufen wird, wurde möglicherweise kein Instanzobjekt erstellt. Wenn ein Aufruf einer nicht statischen Methode von einer statischen Methode ausgegeben wird, welches Objekt ist die nicht statische Methode? verbunden mit? Was ist mit? Diese Logik kann nicht eingerichtet werden, daher gibt eine statische Methode intern einen Aufruf an eine nicht statische Methode aus.
5. Was ist der Unterschied zwischen „==" und der Gleichheitsmethode? Der Operator
== wird speziell verwendet, um zu vergleichen, ob die Werte zweier Variablen gleich sind, dh um zu vergleichen, ob die im Speicher gespeicherten Werte, die den Variablen entsprechen, gleich sind Dasselbe. Wenn Sie zwei Grunddatentypen oder zwei Referenzvariablen auf Gleichheit vergleichen möchten, können Sie nur den Operator == verwenden.
Die Gleichheitsmethode wird verwendet, um zu vergleichen, ob der Inhalt zweier unabhängiger Objekte gleich ist, genau wie beim Vergleich, ob zwei Bücher gleich sind. Die beiden verglichenen Objekte sind unabhängig.
Codebeispiel:
String a = new String("AA"); String b = new String("AA"); System.out.println(a==b); System.out.println(a.equals(b));
Die beiden neuen Anweisungen erstellen zwei Objekte und verwenden dann die beiden Variablen a und b, um jeweils auf eines der Objekte zu verweisen Die ersten Adressen von sind unterschiedlich, das heißt, die in a und b gespeicherten Werte sind unterschiedlich, sodass der Ausdruck a==b false zurückgibt. Der Inhalt der beiden Objekte ist derselbe, daher gibt a,equals(b) true zurück.
Hinweis: String-Vergleiche verwenden grundsätzlich die Methode „equals“.
Wenn eine Klasse keine eigene definierte Equals-Methode hat, erbt sie die Equals-Methode der Object-Klasse. Der Implementierungscode der Object-Klasse lautet wie folgt:
boolean equals(Object o) { return this==o; }
Das zeigt Wenn eine Klasse nicht über eine eigene definierte Methode equal verfügt, entspricht die Methode equal, ihre standardmäßige Methode equal, der Verwendung des ==-Operators, d. h. dem Vergleich der Objekte, auf die zwei Variablen zeigen, mit demselben Objekt. Zu diesem Zeitpunkt führt die Verwendung von equal und == zum gleichen Ergebnis. Wenn Sie eine Klasse schreiben möchten, die vergleichen kann, ob der Inhalt zweier Instanzobjekte gleich ist, müssen Sie die Methode equals überschreiben.
Das obige ist der detaillierte Inhalt vonSammlung klassischer Java-Interviewfragen (1). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!