الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ما المقصود بان الString في الجافا غير قابل للتغير immutable

بدأه phpcraft في 19 أكتوبر 2013 · 10 رد · 2,194 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم 

عندما اقرأ دروس في دروس الجافا يقولون بان الString هو immutable

فما المقصود بذلك وماذا عن المثال ادناه !!! ارى فيه انه يمكننا التغيير عليه ؟

ياريت شرح مع امثلة وشكرا لكم

String s = "Constant";
s = s + " changeable";
System.out.println(s);
#2

وماذا عن String Buffer & String Builder

#3

السلام عليكم ورحمة الله وبركاته

كلمة Immutable أى غير قابلة للطفرة تعنى أنك عندما تحاول تغيير قيمة متغير حرفى string فإنه يلغى مكانه القديم فى الذاكرة وينشئ مكاناً جديداً بالقيمة الجديدة

أنت كمبرمج لا تشعر بهذا لأنك تستخدم الكود بنفس طريقة أى متغير من نوع آخر، ولكن الغرض من هذا التوضيح ألا تغير قيمة المتغير الحرفى بالطريقة الاعتيدادية فى حالة أنك تغير المتغير باستمرار مثل

s = s + b

أى أنك لو تكتب السطر السابق كثيراً فمن الأفضل استخدام stringBuilder لأنه أسرع فى الأداء

11

أدعو الله أن يجعل أعمالنا خالصة لوجهه الكريم --- وأن ينفعنا بما علمنا

Dr Sayed Tohamy

Programming Instructor

مدرب برمجة

---------------

EmaSoft2000

-------------------

#4

immutable تعني غير قابل للتعديل، وماتراه أنت هو كائنات جديدة يتم إنشائها

اما StringBuffer,StringBuilder هي mutable أي تعديل حقيقي، أذكر الفرق ان أحدهما synchronized 

3
(map share people)

فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader

#5

شكرا لكم وبارك الله فيكم

#6
ahmed_youssef كتب:

immutable تعني غير قابل للتعديل، وماتراه أنت هو كائنات جديدة يتم إنشائها

 

مرحبا

 

عذرا على تدخلي ولكني اقرأ عن جافا كثيرا وبدات التحضير لتعلمها

 

سؤال : اليست الجملة التي قلتها تنطبق على جميع اللغات؟

 

عندما تعرف متغير وتحدد له قيمة فان compiler يحفظ في هذا المتغير عنوان في الذاكرة وهذا العنوان يدل على مكان حفظ المعلومة. عندما تغير قيمة المتغير فان الذي يحصل هو ان المتغير يحصل على عنوان ذاكرة جديد

 

هذه اول مرة اسمع بكلمة immutable تذكر في لغة برمجة مع ان جميع اللغات تعمل بنفس الطريقة؟ لماذا هي خاصة بال جافا؟

1

Samir Ibrahim

VFP Blog

VB.NET Blog

#7

السلام عليكم

 

قبل ظهور البرمجة الكائنية التوجه (OOP) كانت تُعرف المتغيرات التي لا يمكن تغيير قيمتها باسم الثوابت (constantes) لتمييزها عن تلك التي يمكن تغييرها في أي وقت.

 

إحدى فوائد الـ Immutable objects تظهر في استخدامها في برامج تحتوي على multi-threads حيث تقوم مجموعة من الـ threads بالتعامل مع بيانات تم عمل implement لها على شكل immutable object دون أن نقلق بشأن التغييرات التي قد يُحدثها أحد الـ threads في لحظة معينة لهذا السبب تُعتبر الـ Immutable objects من أكثر الكائنات أمنا خصوصا عند التعامل مع الـ multi-threads.

 

في سي++ يتم عمل كائن immutable باستخدام الكلمة المفتاحية const و في جافا final.

 

 

بالنسبة لتغير القيمة و العنوان فلا علاقة بينهما (طبعا في حالة المتغير أو الكائن ليس immutable). انظر مثلا الكود التالي :

 

post-219439-0-48638400-1382471588_thumb.

 

 

 

 

بالتوفيق.

2
#8
samir ibrahim كتب:

مرحبا

 

عذرا على تدخلي ولكني اقرأ عن جافا كثيرا وبدات التحضير لتعلمها

 

سؤال : اليست الجملة التي قلتها تنطبق على جميع اللغات؟

 

عندما تعرف متغير وتحدد له قيمة فان compiler يحفظ في هذا المتغير عنوان في الذاكرة وهذا العنوان يدل على مكان حفظ المعلومة. عندما تغير قيمة المتغير فان الذي يحصل هو ان المتغير يحصل على عنوان ذاكرة جديد

 

هذه اول مرة اسمع بكلمة immutable تذكر في لغة برمجة مع ان جميع اللغات تعمل بنفس الطريقة؟ لماذا هي خاصة بال جافا؟

 لا يا أخي :

غالبا في لغات البرمجة الغرضية التوجه الصرفة يكون string immutable  (ركز على غالباً)لكن في بعض اللغات هنا ممكن أن تكون لـstring mutable و string immutable فقط عندما يكون ملحقات بـconst أو هو عبارة عن مؤشر لموقع بالذاكرة (وهي أساس مناعة immutable :) )

||***************************************************||


 ||بسم الله الذي لا يعلو على اسمه شيء في الارض ولا في السماء وهو العلي العظيم ||


||***************************************************||


 ||                             اللهم إن لم يكن بك غضب علي فلا ابالي                       ||


||***************************************************||


في المنتديات العلمية استخدام التقييم rep_up.png  rep_down.png  يرفع من قيمة الموضوع واهمية الرد

#9

شكرا لكم

#10
Snack3r كتب:

بالنسبة لتغير القيمة و العنوان فلا علاقة بينهما (طبعا في حالة المتغير أو الكائن ليس immutable).

 

 

مرحبا

+1

عندما قرات string immutable في السؤال اردت ان اعرف معناها فبحثت ووجدت هذا الرابط Immutability of Strings in Java

 

في هذا الرابط كل الردود كانت على اساس واحد :

اذا اعتبرنا هذا المثل

String str = new String();str  = "Hello";

انك تستطيع تغيير قيمة المغير str من نوع string وذلك باسناد قيمة اخرى له

ولكنك لا تستطيع تغيير كلمة "Hello" من داخل البرنامج

اي ان "Hello" هي immutable

 

لذلك كان سؤالي الاول هو ان هذا هو الحال في كل اللغات تقريبا (ربما ما عدا assembly). فما هي اللغة التي تسمح لك بتغيير "Hello" من الذاكرة مباشرة؟

 

لذلك فان القيمة والعنوان هما اساس الجواب في الرابط السابق.

 

اذا كان فهمي للكلمة خطأ فصحح لي. حيث انا كما قلت ما زلت في بداية التعليم لهذه اللغة.

 

@eiado

 

الرجاء قراءة الرابط من ثم اعطني رايك

تم تعديل هذه المشاركة بواسطة samir ibrahim في 23 أكتوبر 2013 في 11:04

Samir Ibrahim

VFP Blog

VB.NET Blog

#11
اقتباس

 

سؤال : اليست الجملة التي قلتها تنطبق على جميع اللغات؟

 

بإختصار لا، كثير من اللغات تقدم immutable string لكونها أفضل مع الconcurrency وسهولة المشاركة ، ولغات أخرى تأخذ هذا التفكير بعيدا لتصبح بدون "متغيرات". 

لغات أخرى تفضل العكس ك Ruby 
وكثير يقدم الحلين للمستخدم ك rust, racket وبايثون -سابقا-

(map share people)

فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…