PDA

View Full Version : به خاطر داشته باشید که نوع داده، تعیین کننده رفتار است و نه اندازه !!!



svmone
سه شنبه 01 دی 1394, 13:19 عصر
سلام
من دارم یه پی دی اف رو مطالعه می کنم که مطلبی رو به این شکل بیان کرده:

ممکن است این گونه به نظر رسد که استفاده از short یا byte موجب صرفه جویی در فضای حافظه می شود، اما هیچ تضمینی وجود ندارد که جاوا آنها را به طور خودکار به int ارتقاء ندهد. به خاطر داشته باشید که « نوع داده »، تعیین کننده رفتار است و نه اندازه (تنها استثنای موجود، آرایه ها هستند که چنانچه از نوع byte باشند، برای هر عنصر شان از یک بایت استفاده می شود و برای آرایه های نوع short و int به ترتیب از 2 و 4 بایت به ازای هر عنصر استفاده می شود).

به نظرتون این مطلبی که نوشتن صحیحه؟

من خودم شخصا فکر نمی کنم اینطور باشه و اگر اینطور بود که نیازی به ایجاد byte و short نبود !!

و شاید هم منظورش اینه که در محاسبات به نوع بالاتر تبدیل میشن مثلا تو این کد:

int a = 30;
short b = 2;
;a * b


b هم به نوع int تبدیل میشه ولی اینکه گفته شده نوع داده تعیین کننده رفتار است کمی مبهم به نظر میرسه:افسرده:

با تشکر

vahid-p
چهارشنبه 02 دی 1394, 22:51 عصر
دلیلش اینه که جاوا دقیقا چیزی که میخواید رو انجام میده ولی حافظه رو خودش مدیریت میکنه و دلیلش هم اینه که با توجه به ماشین مقصد خودش رو وفق میده که منظور شما همون چیزی باشه که واقعا بوده و محدودیت ماشین مقصد در برنامتون تاثیر نذاره. مثل برخی زبان ها نیست که int یه جا 2 بایت باشه یه جا 4 بایت و...
بلکه تضمین میکنه شما عددی در اندازه 4 بایت خواهید داشت روی هر سیستمی. اما اینکه اون رو چطور ذخیره میکنه به خودش مربوطه.
البته معمولا همون 4 بایت در حافظه اشغال میکنه و 2 بایت برای short و...
ولی فرض کنید روزی برسه که دسترسی به حافظه کمتر از 2 بایت امکان نداشته باشه. اونوقت ممکنه یک byte رو در 2 بایت ذخیره کنه. گرچه این خیلی محاله.

یا یه مثال واضحتر. boolean دو مقدار داره و به یک بیت بیشتر نیاز نداره. اما در عمل نمیتونه یک بیت از حافظه رو بگیریم و یک بایت رو خواهیم گرفت. البته همین هم وابسته به سیستم هست. اما تستی در http://stackoverflow.com/questions/383551/what-is-the-size-of-a-boolean-variable-in-java وجود داره که با اندازه گیری حافظه می تونید ببینید یک boolean چقدر حافظه در سیستم شما مصرف میکنه. طبق این تست هر boolean روی سیستم تست کننده یک بایت رو اشغال کرده.

svmone
پنج شنبه 03 دی 1394, 09:39 صبح
فوق العادست !!!
.
.
.
ممنون بابت توضیحاتتون