نمایش نتایج 1 تا 3 از 3

نام تاپیک: نگاهی دوباره و جالب به تساوی

  1. #1

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

    با سلام
    مطلب جالبی را خواندم که طی آن با چالشی در این زمینه رو به رو شدم. برای فهمیدن کامل مطلب اظهار نظری نمی کنم و پاسخ آن را از اساتید این بخش تقاضا می کنم.
    1- وقتی می گوییم متغیری از نوع عدد صحیح داریم و می نویسیم
    int i;
    دقیقاً منظورمان چیست؟
    2- وقتی می نویسیم که دو عدد صحیح با هم برابرند یعنی:
    int x=10,y=10;
    if(x==y){}
    منظورمان از تساوی، تساوی دو شیء است، دو متغیر است؟
    3-منظور از برنامه زیر چیست؟
    public class B
    {
    public static void main(String args[])
    {
    Integer n1 = new Integer(47);
    Integer n2 = new Integer(47);
    System.out.println(n1==n2);//Result is false
    System.out.println(n1!=n2);//Result is true
    }
    }
    4-منظور از این برنامه چیست؟
    public class B
    {
    public static void main(String args[])
    {
    Integer n1 = new Integer(47);
    Integer n2 = new Integer(47);
    System.out.println(n1.equals(n2));//Result is true
    }
    }
    5-و این برنامه؟
    class Value
    {
    int i;
    }
    public class B
    {
    public static void main(String args[])
    {
    Value n1 = new Value();
    Value n2 = new Value();
    n1.i=n2.i=100;
    System.out.println(n1.equals(n2));//Result is false
    }
    }
    منظور من از طرح این سوال ها، یافتن درک درست و صحیح است که نگاه سطحی را از بین می برد.

  2. #2
    کاربر دائمی
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    ایران سرای من است
    پست
    2,655

    نقل قول: نگاهی دوباره و جالب به تساوی

    همه این مطالب شما یک پاسخ دارد و اون این هست که شرط تساوی بررسی محتوای حافظه هست خب وقتی شما چه از نوع اشیا و چه از نوع متغیر ها تعریف کنید فرقی به حال شرط ندارد شرط تساوی فقط محتوانی حافظه گرفته شده از دو طرف را بایت به بایت مقایسه میکند و وقتی این دو حافظه در یک بایت با هم تفاوت داشته باشند شرط شما false یا صفر خواهد بود در غیر این صورت true یا همان نتیجه یک را بر گشت خواهد داد.

  3. #3
    کاربر دائمی آواتار jlover
    تاریخ عضویت
    شهریور 1388
    محل زندگی
    زیر میز کامپیوترم !
    سن
    39
    پست
    314

    identity vs equality

    این بحث رو راجع به رشته ها به طور کامل در چند صفحه ای از کتاب « جاوا،جاوا،جاوا » در خصوص تفاوت همانی بودن و برابر بودن برای اشیا ( انواع ارجاع ) و نوع رشته که تا حدودی مثل انواع ابتدایی باهاش رفتار میشه،اطلاع داشتم ، ولی درباره مثلا Integer نمیدونستم(حتما در خصوص کلاسهای پوشان دیگه مثل Byte or Character or etc صدق میکنه در کتاب the java lang spec هم در همون بخشهای ابتدایی که تا اینجا خوندم نکات خیلی خوبی در خصوص String ها روشن میکنه در همین رابطه...
    اما نتیجه ای که بنده گرفتم به طور خلاصه و به زبون ساده با دخل و تصرف در این منابع :
    دو شی با هم برابرند ، اگر و تنها اگر نام هر دو ارجاعی باشد به یک شیء ( منظور از شی اینجا متغیرهای تعریف شده برای ارجاع به یک کلاس هستند ) و در همه ی موارد به غیر از رشته ها - و الن فهمیدم - به علاوه ی کلاسهای پوشان ، کارکرد عبارت تساوی و متد()equals یکی هست.
    به این نمونه ها توجه کنید :
    Button b1 = new Button();
    Button b2 = new Button()
    Button b3=b1;

    کلید درک این مساله در توجه به عملگر new هست که در واقع یک موجودیت جدید ساخته و فضایی در حافظه بهش تخصیص میده و آدرس اون رو در متغیر( b1,b2 )نگه میداره
    اما وقتی خط سوم رو دز نظر میگیرید،شیء جدیدی در واقع ساخته نشده و b3 تنها ارجاع دیگریست به شیئی که در خط اول ساخته شده .
    بنابراین :
     
    b1==b2 returns false as b1.equals(b2)
    b1==b3 returns true as b1.equals(b3)

    اما درباره رشته ها و کلاسهای پوشان(Integer که شما بهش اشره کردید مثلا ) موضوع کمی فرق میکنه :
    String s1 = new String("str");
    String s2 = new String("str" ;
    String s3 = s1 ;

    در این نوع،برای بررسی برابری فقط مقدار ذخیره شده در متغیر ارزیابی میشه،چه بسا دو سیء متمایز هم باشند !
     
    s1.equals(s2) returns true while s1 == s2 returns false
    also s1==s3 returns true


    یه چیزی که باید توجه بفرمایین اینه که در مورد اول شما با دو متغیر از نوع ابتدایی رو به رو هستید،در مثال دوم دو نوع ارجاع با تبصره ای که توضیح داده شد در مثال رشته که عنوان کردم ، و در مورد سوم با متغیر از نوع ارجاعی روبه رو هستید مثل مثال اولیه که بنده آوردم(یعنی مفهوم همانی و برابری یکسانه )

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •