Java の古典的な面接質問集 (1)

王林
リリース: 2020-07-02 16:31:19
転載
2317 人が閲覧しました

Java の古典的な面接質問集 (1)

##1. & と &&

の違い (推奨される調査:

Java 面接の質問 )

& 演算子には 2 つの用途があります:

(1) ビット単位の AND;

(2) 論理 AND。

&& 演算子は、短絡 AND (または簡潔な AND) 演算です。論理 AND と短絡 AND の違いは非常に大きく、どちらも演算子の左側と右側のブール値が true である必要がありますが、式全体の値は true です。

&& は、&& の左側の式の値が false の場合、右側の式が直接短絡され、演算が実行されないため、短絡演算と呼ばれます。多くの場合、& の代わりに && を使用する必要があります。

たとえば、ユーザーのログインを検証する場合、ユーザー名が null ではなく、空の文字列でもないと判断されます。username != null &&!username.equals("") と記述する必要があります。 & 演算子は、最初の条件が true でない場合は文字列の等価比較をまったく実行できず、そうでない場合は NullPointerException 例外が生成されるため、使用することはおろか、交換することもできません。

2.final キーワードを使用して変数を変更する場合、参照は変更できない、または参照先のオブジェクトは変更できないことを意味しますか?

final キーワードを使用して変数を変更する場合、参照変数は変更できませんが、参照変数が指すオブジェクトの内容は変更できることを意味します。

例:

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. 静的変数とインスタンス変数の違いは何ですか?

構文の違い: 静的​​変数は static キーワードを使用して変更する必要がありますが、インスタンス変数は必要ありません。

プログラム実行時の違い: 静的​​変数はクラスに従属し、インスタンス変数はオブジェクトに従属します。

インスタンス変数はインスタンス オブジェクトを作成する必要があり、そのインスタンス変数には、このインスタンス変数が使用される前に領域が割り当てられます。

静的変数は、プログラムが読み込まれている限りカテゴリ量です。クラスコードのバイトに応じて、静的変数にスペースが割り当てられ、使用できるようになります。

要約すると、インスタンス変数はオブジェクト作成後にこのオブジェクトを通じて使用する必要があり、静的変数はクラス名を使用して直接参照できます。

注: (静的) 静的変数の使用にも制限があります。クラス内の非静的メソッドおよび変数を静的メソッドで呼び出すことはできません。クラスがロードされた後、メモリには変数が 1 つだけ存在します。 . クラスのすべてのインスタンス オブジェクトによって共有できるメモリ空間。

4.静的メソッド内から非静的メソッドの呼び出しを発行することは可能ですか?

できません。

非静的メソッドはオブジェクトに関連付けられているため、オブジェクトでメソッド呼び出しを行う前にオブジェクトを作成する必要があります。静的メソッドを呼び出す場合、オブジェクトを作成する必要はなく、直接呼び出すことができます。

つまり、静的メソッドが呼び出されたとき、インスタンス オブジェクトが作成されていない可能性があります。静的メソッドから非静的メソッドへの呼び出しが発行された場合、どのオブジェクトが関連付けられた非静的メソッドであるかということです。どうですか?このロジックは確立できないため、静的メソッドは内部的に非静的メソッドへの呼び出しを発行します。

5.「==」メソッドと「equals」メソッドの違いは何ですか?

== 演算子は、2 つの変数の値が同じかどうかを比較するために特に使用されます。つまり、変数に対応するメモリに格納されている値が正しいかどうかを比較します。同じ。 2 つの基本タイプのデータまたは 2 つの参照変数を比較して等しいかどうかを確認する場合は、== 演算子のみを使用できます。

equals メソッドは、2 つの本が同じかどうかを比較するのと同じように、2 つの独立したオブジェクトの内容が同じかどうかを比較するために使用されます。比較する 2 つのオブジェクトは独立しています。

コード例:

String a = new String("AA");
String b = new String("AA");
System.out.println(a==b);
System.out.println(a.equals(b));
ログイン後にコピー

2 つの新しいステートメントは 2 つのオブジェクトを作成し、次に 2 つの変数 a と b を使用してそれぞれオブジェクトの 1 つを指します。これらは 2 つの異なるオブジェクトです。最初のアドレスは、の値が異なる、つまり a と b に格納されている値が異なるため、式 a==b は false を返します。 2 つのオブジェクトの内容は同じであるため、a,equals(b) は true を返します。

注: 文字列比較では基本的に、equals メソッドが使用されます。

クラスに独自に定義されたequalsメソッドがない場合、そのクラスはObjectクラスのequalsメソッドを継承します。Objectクラスの実装コードは次のとおりです:

boolean equals(Object o)
{
return this==o;
}
ログイン後にコピー

これは意味します。クラスに独自に定義されたequalsメソッドがない場合、そのデフォルトのequalsメソッドであるequalsメソッドは、==演算子を使用すること、つまり、2つの変数が指すオブジェクトを同じオブジェクトと比較することと同等です。このとき、equals と == を使用しても同じ結果が得られます。 2 つのインスタンス オブジェクトの内容が同じかどうかを比較できるクラスを作成する場合は、equals メソッドをオーバーライドする必要があります。

以上がJava の古典的な面接質問集 (1)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:csdn.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート