0 امتیاز
قبل در برنامه نویسی توسط (9 امتیاز)
ویرایش شده قبل توسط

همونطور که میدونیم درجاوا Literal Value های صحیح و اعشاری به صورت پیشفرض به ترتیب int و double در نظر گرفته میشن. در دستور ;float f = 2.5 به دلیل down casting و double بودن مقدار 2.5 با قرار دادن f بعد از 2.5 مشکل حل میشه. و اما سوال بنده:

پس چرا برای مثال در دستور ;byte b = 8 (با توجه به اینکه 8 به صورت پیشفرض int در نظر گرفته میشه)

بعد از عدد 8، b قرار نمیدیم؟ 

1 پاسخ

+2 امتیاز
قبل توسط (87 امتیاز)
ویرایش شده قبل توسط

جواب سوال شاید این باشه که «چون زبان از اول به این شکل طراحی شده!» و بر اساس سند «JLS» یا Java Language Specification نیازی به این کار نیست، و اگر همچین کاری هم بکنیم جاوا متوجه مفهومش نمی شه.

حالا این که چرا از اول این مسئله رو در نظر نگرفتن که برای نوع داده ی byte و short به اصطلاح Literal Suffix طراحی نکردن، یک سوال دیگه است. و باید از طراحان زبان پرسید.

شاید مهم ترین دلیلش این باشه که JVM برای انجام محاسبات جبری روی byte و short آنها را تبدیل به int می کنه و بعد وارد محاسبات می شن. در نتیجه احساس نیاز به کار با byte و short به صورت literal کم بوده، و type casting کفاف می کرده.

جالبه که همچین پیشنهادی قبلا مطرح شده که می تونید به Mailing List در این مورد مراجعه کنید:

http://mail.openjdk.java.net/pipermail/coin-dev/2009-March/000905.html

مرجع اول

مرجع دوم

قبل توسط (9 امتیاز)
ویرایش شده قبل توسط
احمد جان من یه استدلالی دارم.به نظر شما درسته؟
به نظرم وقتی که بعد از literal valueها حرفهای D,L,F میزاریم، در وافع این حروف به جای (double)(long)(float) عمل Casting انجام نمیدن.در واقع من همون اولش میگم این یکی از سه مقدار بالاست و مقدار از اول به صورت پیش فرض int فرض نمیشه.درسته؟
قبل توسط (87 امتیاز)
بلی، همینطوره

سوالات مشابه

0 امتیاز
1 پاسخ 378 بازدید
سوال شده 9 سال قبل در برنامه نویسی توسط Saeed Zarinfam (1.1هزار امتیاز)
0 امتیاز
1 پاسخ 323 بازدید
سوال شده 10 سال قبل در برنامه نویسی توسط Saeed Zarinfam (1.1هزار امتیاز)
+1 امتیاز
1 پاسخ 636 بازدید
0 امتیاز
1 پاسخ 607 بازدید
0 امتیاز
1 پاسخ 713 بازدید
+1 امتیاز
1 پاسخ 507 بازدید
0 امتیاز
0 پاسخ 285 بازدید
+1 امتیاز
1 پاسخ 476 بازدید
...