Java の浅いコピーと深いコピーの違いは何ですか?
浅いコピーと深いコピーの違い: 浅いコピー: 同じデータを参照するオブジェクトを作成します。コピーを変更すると、元のオブジェクトにも影響します。ディープ コピー: 元のオブジェクトのデータのコピーを含むオブジェクトを作成します。コピーを変更しても元のオブジェクトには影響しません。
#Java の浅いコピーと深いコピー
はじめに
Java では、浅いコピーと深いコピーの概念を理解することは、オブジェクトの操作にとって重要です。このチュートリアルでは、この 2 つの違いについて詳しく説明し、コード例を使用して説明します。浅いコピー
- 元のオブジェクトの同じ基になるデータを参照する新しいオブジェクトを作成します。
- 浅いコピーへの変更は元のオブジェクトにも反映され、その逆も同様です。
- 「
- 同じへの参照」原則に従います。
コード例:
class Person { private String name; private Address address; } public class ShallowCopyDemo { public static void main(String[] args) { Person p1 = new Person(); p1.setName("John Doe"); Address addr = new Address(); addr.setStreet("123 Main St."); p1.setAddress(addr); // Shallow copy Person p2 = p1; // 更改 p2 的地址 p2.getAddress().setStreet("456 Elm St."); // p1 的地址也发生了变化 System.out.println(p1.getAddress().getStreet()); // 输出:456 Elm St. } }
p2 は
p1 の浅いコピーです。同じ
Address オブジェクトを参照します。したがって、
p2 のアドレスを変更すると、
p1 にも影響します。
ディープ コピー
- 元のオブジェクトの基礎となるデータの独立したコピーを持つ新しいオブジェクトを作成します。 ディープコピーを変更しても元のオブジェクトには影響しませんし、その逆も同様です。 「
- 同じ内容」の原則に従ってください。
コード例:
clone() メソッドまたはサードパーティ ライブラリ (Apache Commons Lang など) を使用して、ディープコピーを実装します。
clone() メソッドの使用:
class Person implements Cloneable { private String name; private Address address; @Override public Person clone() { try { // 使用 super.clone() 创建新对象 return (Person) super.clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); } return null; } } public class DeepCopyDemo { public static void main(String[] args) { Person p1 = new Person(); p1.setName("John Doe"); Address addr = new Address(); addr.setStreet("123 Main St."); p1.setAddress(addr); // Deep copy Person p2 = p1.clone(); // 更改 p2 的地址 p2.getAddress().setStreet("456 Elm St."); // p1 的地址保持不变 System.out.println(p1.getAddress().getStreet()); // 输出:123 Main St. } }
clone() メソッドが
p1## に対して作成されます。 # ディープコピー。 p2
のアドレスを変更しても、p1
には影響しません。これは、p1
が別の Address
オブジェクトを参照しているためです。
ディープ コピーとシャロー コピーをいつ使用するか?
- 浅いコピー: 浅いコピーは、オブジェクトのコピーの変更に副作用がない場合に実行できます。
- ディープ コピー: オブジェクトのコピーを変更すると元のオブジェクトに影響を与える可能性がある場合、ディープ コピーを作成する必要があります。
たとえば、オブジェクトをキャッシュするとき、またはオブジェクトを信頼できないコードに渡すときは、必ずディープ コピーを使用してください。
以上がJava の浅いコピーと深いコピーの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









サーバー側に文字エンコードを設定して、文字化けしたブートストラップテーブルを解決するには、次の手順に従う必要があります。サーバー文字のエンコーディングを確認します。サーバー構成ファイルを編集します。 EncodingをUTF-8に設定します。サーバーを保存して再起動します。エンコーディングを確認します。

ApacheでCGIディレクトリを設定するには、次の手順を実行する必要があります。「CGI-Bin」などのCGIディレクトリを作成し、Apacheの書き込み許可を付与します。 Apache構成ファイルに「Scriptalias」ディレクティブブロックを追加して、CGIディレクトリを「/cgi-bin」URLにマッピングします。 Apacheを再起動します。

Apacheを開始する手順は次のとおりです。Apache(コマンド:sudo apt-get install apache2または公式Webサイトからダウンロード)をインストールします(linux:linux:sudo systemctl start apache2; windows:apache2.4 "serviceを右クリックして「開始」を右クリック) (オプション、Linux:Sudo SystemCtl

この記事では、DebianシステムのOpenSSL構成を確認して、システムのセキュリティステータスをすばやく把握できるように、いくつかの方法を紹介します。 1.最初にOpenSSLバージョンを確認し、OpenSSLがインストールされているかどうかを確認し、バージョン情報を確認します。端末に次のコマンドを入力します。OpenSSlversionがインストールされていない場合、システムはエラーを促します。 2。構成ファイルを表示します。 OpenSSLのメイン構成ファイルは、通常/etc/ssl/openssl.cnfにあります。テキストエディター(Nanoなど)を使用して、次のように表示できます。sudonano/etc/ssl/openssl.cnfこのファイルには、キー、証明書、暗号化アルゴリズムなどの重要な構成情報が含まれています。 3。OPEを利用します

Apacheから追加のservernameディレクティブを削除するには、次の手順を実行できます。追加のservernameディレクティブを識別して削除します。 Apacheを再起動して変更を有効にします。構成ファイルを確認して、変更を確認します。サーバーをテストして、問題が解決されていることを確認します。

この記事では、Debianシステムの下でApacheログを分析することにより、Webサイトのパフォーマンスを改善する方法について説明します。 1.ログ分析の基本Apacheログは、IPアドレス、タイムスタンプ、リクエストURL、HTTPメソッド、応答コードなど、すべてのHTTP要求の詳細情報を記録します。 Debian Systemsでは、これらのログは通常、/var/log/apache2/access.logおよび/var/log/apache2/error.logディレクトリにあります。ログ構造を理解することは、効果的な分析の最初のステップです。 2。ログ分析ツールさまざまなツールを使用してApacheログを分析できます。コマンドラインツール:GREP、AWK、SED、およびその他のコマンドラインツール。

Apacheはデータベースに接続するには、次の手順が必要です。データベースドライバーをインストールします。 web.xmlファイルを構成して、接続プールを作成します。 JDBCデータソースを作成し、接続設定を指定します。 JDBC APIを使用して、接続の取得、ステートメントの作成、バインディングパラメーター、クエリまたは更新の実行、結果の処理など、Javaコードのデータベースにアクセスします。

Apacheサーバーでバージョンを表示するには3つの方法があります。コマンドライン(Apachectl -vまたはapache2ctl -v)を介して、サーバーステータスページ(http://< server ipまたはdomain name>/server -status)を確認します。
