Javaにおける文字列の不変性
メニューを表示するにはスワイプしてください
すでにご存知の通り、Stringは顧客名、商品名、メッセージなどのテキストを格納します。しかし、JavaにおいてStringが特別なのは、**イミュータブル(不変)**であることです。
イミュータビリティとは、一度Stringオブジェクトが生成されると、その内容が変更できないことを意味します。文字列を変更するように見える操作は、実際には新しいStringオブジェクトを裏で作成しています。
例
Main.java
123456789101112131415package com.example; public class Main { public static void main(String[] args) { int stock = 20; String drink = "Espresso"; stock = 15; drink = "Cappuccino"; System.out.println(stock); // 15 System.out.println(drink); // Cappuccino } }
両方の変数が再代入されたにもかかわらず、内部的には異なる動作をします。intの場合、変数は値自体を直接格納しており、再代入は単純にその値を置き換えます。しかし、Stringは参照型であり、変数はメモリ上のStringオブジェクトを指すアドレスを格納します。"Cappuccino"が代入されると、Javaは"Espresso"を変更せず、新しいStringオブジェクトを作成し、drinkがそれを指すようにします。元の"Espresso"オブジェクトは変更されません。
ステップごとの動作
String drink = "Espresso";
JavaはStringオブジェクト"Espresso"を作成し、drinkがそれを指します。
drink = "Cappuccino";
Javaは新しいStringオブジェクト"Cappuccino"を作成し、drinkは新しいオブジェクトを指します。"Espresso"はそのまま残ります。
フィードバックありがとうございます!
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください
Javaにおける文字列の不変性
すでにご存知の通り、Stringは顧客名、商品名、メッセージなどのテキストを格納します。しかし、JavaにおいてStringが特別なのは、**イミュータブル(不変)**であることです。
イミュータビリティとは、一度Stringオブジェクトが生成されると、その内容が変更できないことを意味します。文字列を変更するように見える操作は、実際には新しいStringオブジェクトを裏で作成しています。
例
Main.java
123456789101112131415package com.example; public class Main { public static void main(String[] args) { int stock = 20; String drink = "Espresso"; stock = 15; drink = "Cappuccino"; System.out.println(stock); // 15 System.out.println(drink); // Cappuccino } }
両方の変数が再代入されたにもかかわらず、内部的には異なる動作をします。intの場合、変数は値自体を直接格納しており、再代入は単純にその値を置き換えます。しかし、Stringは参照型であり、変数はメモリ上のStringオブジェクトを指すアドレスを格納します。"Cappuccino"が代入されると、Javaは"Espresso"を変更せず、新しいStringオブジェクトを作成し、drinkがそれを指すようにします。元の"Espresso"オブジェクトは変更されません。
ステップごとの動作
String drink = "Espresso";
JavaはStringオブジェクト"Espresso"を作成し、drinkがそれを指します。
drink = "Cappuccino";
Javaは新しいStringオブジェクト"Cappuccino"を作成し、drinkは新しいオブジェクトを指します。"Espresso"はそのまま残ります。
フィードバックありがとうございます!