Java ではなぜ文字列が不変なのでしょうか?
出典: Dev.to Java で文字列が不変である理由を理解する前に、なぜ何かを不変にするのかを考える必要があります。 不変とは、一度作成すると変更できないことを意味します。何かを不変にすることが考えられる唯一の理由は、一緒に使用した場合の同期のためです。これが、文字列が不変である理由です。Java では、 StringオブジェクトはString プールで共有され、キャッシュされます。これは、文字列が同じ値を持つ場合に複数のスレッド間で保存および共有されるヒープ上の特定の場所です。たとえば、文字列プールに値「test」を持つ文字列がすでに存在し、プログラムが同じ値を持つ別の文字列オブジェクトを作成したい場合、新しい文字列オブジェクトを作成する代わりに同じ参照を取得します。これで、文字列がヒープにどのように格納されるかがわかりました。なぜ変化しないのか見てみましょう。-
不変性の最初の理由はスレッドの安全性です。行は行プール内の複数のスレッド間で共有されるため、ランダムなスレッドによる変更を制限する必要があります。行に変更を加えると、同じ行にアクセスする他のスレッドに影響を与える可能性があります。スレッドが行の値を更新したい場合は、別の行を作成してそれを参照する必要があります。
-
通常、 MapのキーとしてStringを使用します。文字列が変更可能であれば、誰でも文字列の値を変更でき、実際のキーが失われることになります。
Java のインターフェースと多重継承
出典: Dev.to 多重継承とは何かを理解しましょう。多重継承は、オブジェクトまたはクラスが複数の親オブジェクトまたは親クラスから機能を継承できる一部のオブジェクト指向プログラミング言語の機能です。 上の図に示すように、多重継承の子クラスは 2 つ以上の基本クラスを持つことができますが、これを実現するにはインターフェイスが必要です。インターフェース
Java のインターフェイスはクラスの設計図です。静的定数と抽象メソッドがあります。つまり、インターフェイスには抽象メソッドと変数のみを含めることができ、メソッド本体を持つことはできません。抽象クラスと同じ方法では作成できません。では、これらのメソッドの本体はどこで宣言すればよいのでしょうか?
メソッドの本体は、プログラマの要件に従ってメソッドが必要なクラス内で宣言されます。インターフェイスを宣言するにはどうすればよいですか?
インターフェイスは、interfaceキーワードを使用して宣言できます。構文:interface interface_name {abstract methods}
注記
宣言されたインターフェイスをクラスで使用するには、implementsキーワードを使用する必要があります。実装?
まず、印刷インターフェイスを作成し、その中に抽象print()メソッドを作成します。interface printgib{
void print();
}
これで、クラスで使用できるインターフェイスが完成したので、クラスabcとgkを作成し、その中にインターフェイスを実装しましょう。
public class abc implements printgib{
public void print(){ //1st implementation of print
System.out.println("I love you 3000");
}
public static void main(String[] args){
abc obj = new abc();
gk obj1 = new gk();
obj.print();
obj1.print();
}
}
class gk implements printgib{
public void print(){ //2nd implementation of print
System.out.println("I am Gk");
}
}
上記のコードに示すように、多重継承を実現し、インターフェイスを実装しました。コードを実行するには、ファイルを保存して...
javac file_name.java
java abc
GO TO FULL VERSION