دانستنی‌ها

تساوی‌های ترکیبی جاوا

احتمالا همه بعد از آشنایی با عملگرهایی مثل += و -= ذوق زده شده و در پیش فرض ذهنی خود آنان را میانبرهایی برای عملیات معمول و ساده در نظر گرفته و معادل می‌دانستیم. اما آیا واقعا معادل هستند؟

در نگاه اول خیلی افراد دو دستور زیر را یکسان می‌دانند.

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'

 

منبع:

http://docs.oracle.com/

http://stackoverflow.com/

نوشته های مشابه

‫2 دیدگاه ها

  1. سلام به نکته خیلی خوبی اشاره کردید اما دوتا اشتباه کوچیک وجود داره لطفا اصلاح بفرمایید
    ۱. جمله اما بیایید دو عملیات زیر را با پیش فرض زیر اجرا کنید: باید مینوشتید دو عملیات بالا را…
    ۲. جمله در اینصورت دستور اول با خطای کامپایل روبرو شده اما دستور دوم به خوبی کامپایل می‌شود! رو جابه جا نوشتید دستور i=i+jخطای کامپایل داره نه دستور I+=j

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا