tgoop.com/javapro_ir/4541
Create:
Last Update:
Last Update:
📌 موضوع: String Pool در جاوا و تفاوت == با equals
در جاوا رشتهها (`String`) یک ویژگی خاص دارند به نام String Pool. این مکانیزم باعث میشود مدیریت حافظه بهینهتر شود.
🔎 String Pool چیست؟
وقتی شما یک رشته با لیترال (Literal) بسازید، جاوا آن را در یک حافظهی خاص به نام String Pool نگه میدارد. اگر دوباره همان رشته را با همان مقدار بسازید، جاوا از همان شیء موجود در String Pool استفاده میکند.
📘 مثال ۱ – استفاده از String Pool:
public class StringPoolDemo {
public static void main(String[] args) {
String s1 = "Ali";
String s2 = "Ali";
System.out.println(s1 == s2); // true
System.out.println(s1.equals(s2)); // true
}
}
👉 چرا
==
اینجا true شد؟چون هر دو متغیر به یک شیء یکسان در String Pool اشاره میکنند.
📘 مثال ۲ – استفاده از new String():
public class StringPoolDemo2 {
public static void main(String[] args) {
String s1 = new String("Ali");
String s2 = new String("Ali");
System.out.println(s1 == s2); // false
System.out.println(s1.equals(s2)); // true
}
}
👉 این بار
==
false شد، چون هر بار که از new String()
استفاده میکنیم، یک شیء جدید در حافظه Heap ساخته میشود (نه در String Pool).اما
equals()
مقدار محتوای رشته را مقایسه میکند، بنابراین true میدهد.📘 مثال ۳ – متد intern():
public class StringPoolDemo3 {
public static void main(String[] args) {
String s1 = new String("Ali");
String s2 = s1.intern(); // این رشته وارد String Pool میشود
String s3 = "Ali";
System.out.println(s2 == s3); // true
}
}
👉 متد
intern()
باعث میشود رشته وارد String Pool شود و از آن به بعد مقایسه با ==
هم true خواهد شد.✅ نتیجهگیری:
* همیشه از equals() برای مقایسهی مقدار رشتهها استفاده کنید.
*
==
فقط بررسی میکند که دو متغیر به یک شیء یکسان در حافظه اشاره میکنند.* بهینهسازی حافظه در جاوا برای رشتهها به کمک String Pool انجام میشود.
#کاربر_مبتدی
🆔 @javapro_ir
🆔 @group_javapro
BY برنامه نویسی جاوا | Java
Share with your friend now:
tgoop.com/javapro_ir/4541