ホームページ  >  記事  >  Java  >  2020 年の新しい Java 面接の質問 - 基本パート (1)

2020 年の新しい Java 面接の質問 - 基本パート (1)

王林
王林転載
2020-03-31 16:03:482709ブラウズ

2020 年の新しい Java 面接の質問 - 基本パート (1)

1. JDK と JRE の違いは何ですか?

JDK: Java Development Kit の略で、Java 開発ツールキットであり、Java の開発環境と実行環境を提供します。

JRE: Java Runtime Environment の略で、Java 実行環境。Java の動作に必要な環境を提供します。

具体的には、JDK には実際には JRE、Java ソース コードをコンパイルするコンパイラ javac、および Java プログラムをデバッグおよび分析するための多くのツールが含まれています。簡単に言うと、Java プログラムを実行する必要がある場合は JRE をインストールするだけでよく、Java プログラムを作成する必要がある場合は JDK をインストールする必要があります。

(関連チュートリアル: java の一般的な面接の質問 )

2. == と等しいの違いは何ですか?

== 解釈

== の効果は、次のように基本型と参照型で異なります。

基本型: 比較されるのは、値が以下であるかどうかです。は同じです;

参照タイプ: 比較は参照が同じかどうかです;

コード例:

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

コード解釈: x と y が同じを指しているためです。参照、== も true、新しい String() メソッドはメモリ領域を空けるために書き換えられるため、== の結果は false になり、equals は常に値を比較するため、結果はすべて true になります。

equals 解釈

equals は本質的に == ですが、String と Integer がequals メソッドをオーバーライドして値の比較に変える点が異なります。以下のコードを見て理解してください。

まず、デフォルトで、equals が同じ値を持つオブジェクトをどのように比較するかを見てみましょう。コードは次のとおりです:

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

出力結果は予想を超えています。偽ですか?何が起こっているのでしょうか? イコールのソース コードを読めばわかります。ソース コードは次のとおりです:

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

イコールは本質的に == であることがわかります。

それでは、なぜ同じ値を持つ 2 つの String オブジェクトが true を返すのかという疑問が生じます。コードは次のとおりです:

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

同様に、文字列の等しいメソッドを入力すると、答えが見つかります。コードは次のとおりです:

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;
}

文字列が等号をオーバーライドすることがわかります。オブジェクトのメソッドを変更し、参照比較を変更すると値比較になります。

概要: == は基本型の値の比較であり、参照は参照型の比較であり、equals はデフォルトで参照比較ですが、String などの多くのクラスでは、equals メソッドが再実装されています。 、Integer などは値の比較に変換するため、通常の状況では、equals は値が等しいかどうかを比較します。

(推奨学習: java クイック スタート )

3. 2 つのオブジェクトの hashCode() が同じ場合、equals() も true でなければなりません。

いいえ、2 つのオブジェクトの hashCode() は同じであり、equals() は true ではない可能性があります。

コード例:

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

実行結果:

2020 年の新しい Java 面接の質問 - 基本パート (1)

コードの解釈: 明らかに hashCode( ) は同じですが、等しい( ) が false なのは、ハッシュ テーブルでは hashCode() が等しいため、2 つのキーと値のペアのハッシュ値が等しいことを意味しますが、ハッシュ値が等しい場合、必ずしもそれを意味するわけではありません。キーと値のペアは等しい。

4. Java における Final の役割は何ですか?

最後に変更されたクラスを最終クラスと呼び、このクラスは継承できません。

最終的に変更されたメソッドはオーバーライドできません。

最終的に変更された変数は定数と呼ばれます。定数は初期化する必要があります。初期化後は値を変更できません。

5. Java の Math.round(-1.5) は何に相当しますか?

は -1 に等しくなります。数値軸の値を取得するとき、中央の値 (0.5) が右に丸められるため、正の 0.5 は切り上げられ、負の 0.5 は直接破棄されます。

6. String は基本的なデータ型ですか?

String は基本型に属しません。基本型は byte、boolean、char、short、int、float、long、double の 8 つあり、String はオブジェクトに属します。

7. Java で文字列を操作するためのクラスは何ですか?それらの違いは何ですか?

文字列を操作するクラスには、String、StringBuffer、および StringBuilder が含まれます。

String と StringBuffer および StringBuilder の違いは、String が不変オブジェクトを宣言することです。各操作では新しい String オブジェクトが生成され、ポインタが新しい String オブジェクトを指しますが、StringBuffer と StringBuilder は元のオブジェクトに基づいて操作が行われるため、文字列の内容が頻繁に変更される場合には String を使用しないほうがよいでしょう。

StringBuffer と StringBuilder の最大の違いは、StringBuffer はスレッド セーフであるのに対し、StringBuilder は非スレッド セーフであることですが、StringBuilder のパフォーマンスは StringBuffer よりも高いため、単一の環境で StringBuilder を使用することをお勧めします。 -スレッド環境およびマルチスレッド環境では、StringBuffer を使用することをお勧めします。

8. String str="i" は String str=new String("i") と同じですか?

メモリ割り当て方法が異なるため、異なります。 String str="i" の場合、Java 仮想マシンはそれを定数プールに割り当て、String str=new String("i") はヒープ メモリに割り当てられます。

9. 文字列を反転するにはどうすればよいですか?

使用 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视频教程

以上が2020 年の新しい Java 面接の質問 - 基本パート (1)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。