View Full Version : سوال: متغیر length در آرایه ها
deCODER-
دوشنبه 25 اسفند 1393, 23:26 عصر
خسته نباشید دوستان ...
سوالم اینه که آرایی که ما میسازیم ، مگه یک شی هست که دارای متغیر نمونه باشه؟(در اینجا متغیر منظورم length هست)
میدونید که arrayname.length سایز آرایه رو برگشت میده.اما چجور ممکنه؛چون آرایه ای ک ما ساختیم ، کلاس نیست که دارای متغیری بوده باشه!!! این length پس از کجا اومده؟
تشکر
[younes]
سه شنبه 26 اسفند 1393, 03:05 صبح
آرایه ها شیء هستند
برطبق مستندات اوراکل (http://docs.oracle.com/javase/specs/) در بخش زبان جاوا و خصوصیات ماشین مجازی-4.3.1 در مورد اشیاء به صورت صریح آمده =>( یک شی یا یک نمونه از یک کلاس است و یا یک آرایه است).
به نظر من امکانش هست به راحتی این رو خودتون هم چک کنید با استفاده از عملگر instanceof میشه فهمید یه آبجکت آیا از یک نوع هست یا خیر که در این جا باید برسی بشه آرایه از نوع کلاس Object است یا نه تا جواب مشخص شود.
String[] str_array= new String[10];
if (str_array instanceof Object){System.out.println("array is an object");}
ahmad.mo74
سه شنبه 26 اسفند 1393, 12:14 عصر
http://stackoverflow.com/a/9297956/3767784
-سیّد-
یک شنبه 23 فروردین 1394, 20:54 عصر
حتی شما میتونید برای استفاده از Reflection، از فیلد class یک آرایه هم استفاده کنید:
System.out.println(String[].class);
deCODER-
یک شنبه 30 فروردین 1394, 21:54 عصر
حتی شما میتونید برای استفاده از Reflection، از فیلد class یک آرایه هم استفاده کنید:
System.out.println(String[].class);
طبق چیزی که گفتید من با کلاس String آشنایی دارم اما سوالم اینه که کلاس String[] چیه و فرقش با کلاس String ?
میشه در مورد چیزی ک نوشتید بیشتر توضیح بدید؟
-سیّد-
یک شنبه 30 فروردین 1394, 22:10 عصر
خوب همونطور که دوستان گفتند، و توی اون جواب stackoverflow هم به خوبی توضیح داده، یک آرایه خودش یه کلاس جداگانه هست.
یعنی String یه کلاس هست، و []String یه کلاس دیگه. یا مثلاً []int هم یه کلاس دیگه هست (البته یه جورایی کلاس مجازی هستن، از این نظر که کد مرتبط ندارن که به شما نشون بده. ولی دقیقاً توی سیستم به عنوان یه کلاس در نظر گرفته میشن).
بنابراین انگاری []String یه کلاس هست به این صورت:
public class String[] {
public final int length;
public String[](int length) { // constructor
this.length = length;
}
public String[] clone() {
return super.clone(); // مثلاً!
}
}
و وقتی میگین:
new String[10]
طبق این کلاس تخیلی که نوشتیم، انگار گفتین:
new String[](10)
ahmad.mo74
یک شنبه 30 فروردین 1394, 22:44 عصر
سلام
برای اینکه کاملا جا بیفته مطلب اینارم ببینید، توضیحات خوبی دادن :
http://stackoverflow.com/a/6867170/3767784
http://stackoverflow.com/a/8546532/3767784
http://stackoverflow.com/a/12807748/3767784
اینم برای اینکه مطمئن بشی واقعا کلاسی برای []int و... وجود داره :
http://stackoverflow.com/a/5076699/3767784
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.