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 پاسخ 354 بازدید
سوال شده 9 سال قبل در برنامه نویسی توسط Saeed Zarinfam (1.1هزار امتیاز)
0 امتیاز
1 پاسخ 294 بازدید
سوال شده 9 سال قبل در برنامه نویسی توسط Saeed Zarinfam (1.1هزار امتیاز)
+1 امتیاز
1 پاسخ 586 بازدید
0 امتیاز
1 پاسخ 569 بازدید
0 امتیاز
1 پاسخ 686 بازدید
+1 امتیاز
1 پاسخ 481 بازدید
0 امتیاز
0 پاسخ 259 بازدید
+1 امتیاز
1 پاسخ 435 بازدید
...