פורסם 2008 באוגוסט 1517 שנים שלום לכולם, רק התחלתי ללמוד מספר JAVA לפני כמה ימים ולא כ"כ הבנתי אם אני יכול ליצור שני עצמים ולהציב עצם אחד בשני לדוגמא:Class X כלשהוX p1=new X;X p2= new X;האם ניתן לרשום p1=p2 ולהציב עצם אחד בשני ואם כן מה למעשה תעשה הפעולה הזאת?ועוד שאלה קטנה אפשר להגיד דומה איך זה הולך עם מערך של עצמים האם ניתן להציב מערך אחד בשני? תודה.
פורסם 2008 באוגוסט 1517 שנים טיפ קטן: כשאתה כותב קוד בפורום, תשתמש בכפתור # למעלה כדי שהקוד ייראה טוב.הפעולה p1=p2 גורמת לכך ש-p1 ו-p2 למעשה יצביעו על אותו אובייקט - כלומר, כל שינוי שתבצע עכשיו ב-p1 ישפיע גם על p2.אותו הדבר נכון לגבי מערכים. לדוגמה, בקטע הקוד הבא:int[] arr1 = new int[5];arr1[0] = 0;int[] arr2 = arr1;arr2[0] = 1;System.out.println(arr1[0]);התכנית תדפיס 1, כי שני המשתנים (arr1 ו-arr2) מצביעים על אותו המערך.אם אתה רוצה להחזיק שני מערכים נפרדים, ולהעתיק את התוכן מאחד לשני, אז אתה חייב לעשות את זה ידנית ולא באמצעות השמה (נניח ע"י לולאה שמעתיקה איבר-איבר).
פורסם 2008 באוגוסט 1517 שנים מחבר קודם כל תודה רבה עזרת לי מאוד. רק רציתי לשאול במקרה ואני רוצה להעתיק עצם אחד לשני ואני רוצה שהם לא יהיו תלויים אחד בשני אז אני צריך לעבוד כמו במערך וללכת משתנה/עצם אחד אחד ולהעתיק אותם בין p1 ל-p2?וד"א שמדובר בדר"כ בפונקציית "בנאי" אז אין ממש בעיה אם זה שאחד הפרמטרים(במידה והוא מערך של עצמים או עצם) למעשה יחלקו את אותו העצם/מערך כלומר שיצביעו על אותו מערך/עצם למעשה השמה רגילה בלי לעבור משתנה משתנה ?
פורסם 2008 באוגוסט 1517 שנים בשביל להעתיק אובייקטים, יש כמה פתרונות:1. כמו שנאמר מעליי, לחלק מהקלאסים יש פונקציית clone שמייצרת אובייקט חדש מתוך האובייקט הקיים.2. חלק מהאובייקט מממשים copy constructor, כלומר בנאי שמקבל אובייקט מאותו טיפוס ומעתיק אותו, ככה:X p2 = new X(p1);
פורסם 2008 באוגוסט 1517 שנים ה clone בד"כ מבצע shallow copy ואל deep copy שזה שהוא עובר על האלמנטים השונים ומעתיק רק את המבנה העליון שלהם מחדש ולא את כל התתי מבנה שלהם באופן רקורסיבי (שזה deep copy).
פורסם 2008 באוגוסט 1517 שנים מחבר ה clone בד"כ מבצע shallow copy ואל deep copy שזה שהוא עובר על האלמנטים השונים ומעתיק רק את המבנה העליון שלהם מחדש ולא את כל התתי מבנה שלהם באופן רקורסיבי (שזה deep copy).אם הוא מבצע shallow copy למה למעשה לא ניתן פשוט לרשום p1=p2 כאשר אלה שני העצמים?
פורסם 2008 באוגוסט 1517 שנים אם זה 2 עצמים אז זה שונה. אני ממליץ לקרוא על ההבדלים בין == ו .equals וגם תסתכל בתיעוד של javadoc למשל על clone של object:http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()
פורסם 2008 באוגוסט 1517 שנים מחבר אוקיי אני אעבור על זה תודה לכם [br]פורסם בתאריך: 15.08.2008 בשעה 13:44:09 אוקיי יש לי דוגמא נגיד ואני רוצה ליצור מחלקה circle ואני רוצה ליצור לה מתודת "בנאי" כזאת לדוגמא: public circle(point c, int r) {center=cradius=r;} אז למעשה המתודה מקבלת עצם c מסוג point ומציבה את העצם c בעצם center. זה למעשה כאן מה שהוא עושה זה הוא מציב את המצביע של c ב-center ולמעשה שניהם מצביעים כרגע על אותו העצם? זה העיקרון מאוחרי זה? תודה.
פורסם 2008 באוגוסט 1517 שנים כן, ואז אם תשנה את C מבחוץ במקום אחר (נגיד עשית 2 מעגלים עם אותו מצביע למרכז) אז גם הוא ישתנה (לעומת זאת ה R לא ישתנה כי זה משתנה פרימיטיבי).
פורסם 2008 באוגוסט 1517 שנים מחבר כן, ואז אם תשנה את C מבחוץ במקום אחר (נגיד עשית 2 מעגלים עם אותו מצביע למרכז) אז גם הוא ישתנה (לעומת זאת ה R לא ישתנה כי זה משתנה פרימיטיבי). אוקיי הבנתי תודה שוב
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.