دانستنیها
تساویهای ترکیبی جاوا
احتمالا همه بعد از آشنایی با عملگرهایی مثل += و -= ذوق زده شده و در پیش فرض ذهنی خود آنان را میانبرهایی برای عملیات معمول و ساده در نظر گرفته و معادل میدانستیم. اما آیا واقعا معادل هستند؟
در نگاه اول خیلی افراد دو دستور زیر را یکسان میدانند.
i += j
i=i+j
اما بیایید دو عملیات بالا را با پیش فرض زیر اجرا کنید:
int i = 5; long j = 8;
در اینصورت دستور دوم با خطای کامپایل روبرو شده اما دستور اول به خوبی کامپایل میشود!
در واقع این تساوی و معادل بودن یک اعتقاد غلط است که در خیلی از افراد وجود دارد. اما در حقیقت عملیات
E1 op= E2
معادل با
E1 = (T)((E1) op (E2))
است.
مثالهای زیر هم تبدیلی که با استفاده از *= و /= صورت میگیرد را به خوبی نشان میدهند.
byte b = 10; b *= 5.7; System.out.println(b); // prints 57
و
byte b = 100; b /= 2.5; System.out.println(b); // prints 40
و
char ch = '0'; ch *= 1.1; System.out.println(ch); // prints '4'
و
char ch = 'A'; ch *= 1.5; System.out.println(ch); // prints 'a'
منبع:
سلام به نکته خیلی خوبی اشاره کردید اما دوتا اشتباه کوچیک وجود داره لطفا اصلاح بفرمایید
۱. جمله اما بیایید دو عملیات زیر را با پیش فرض زیر اجرا کنید: باید مینوشتید دو عملیات بالا را…
۲. جمله در اینصورت دستور اول با خطای کامپایل روبرو شده اما دستور دوم به خوبی کامپایل میشود! رو جابه جا نوشتید دستور i=i+jخطای کامپایل داره نه دستور I+=j
سلام. ممنون اصلاح شد.