تیکه پاره های جاوا
526 subscribers
93 photos
24 videos
7 files
58 links
سلام خوش اومدید. اینجا یادداشت ها و تکه های جاوا رو کنار هم قرار میدیم :) مطالب کاملا اختصاصی و دستنویس هستند. کپی فقط با ذکر منبع و آیدی کانال❤️

📝برای تدریس پیام دهید
محمدرضا عظیمی‌فرد
🆔 @mrvj475
Download Telegram
💎 مقایسه اشیا (ابجکت ها) در جاوا

🔆 توی جاوا هر کلاس بصورت پیشفرض از کلاس Object ارث بری میکند. کلاس Object شامل متد هایی مثل hashCode, equals, toString و... میشود که کاربرد گسترده ای در رابطه با کار با ابجکت ها دارند. به همین منظور برای مقایسه ابجکت ها از متد equals و hashCode از کلاس Object استفاده میشود.

🔗در مورد کلاس آبجکت از اینجا بخوانید

🔅هش کد در جاوا یک عدد صحیح 32 بیتی میباشد. هش کد یک مقدار منحصر بفرده که بصورت پیشفرض توسط JVM برای هر نمونه (شی / ابجکت) تعریف میشود.

👈 طبق این تعریف اگر دو ابجکت دارای هش کد برابر باشند، یعنی با هم برابرند با توجه به متد equals ولی لزوما دو ابجکت با هش کد برابر، با هم برابر نیستند. یعنی این شرط لازم و کافی نیست.

برای بررسی برابر بودن ابجکت ها، لازم است متد equals پیاده سازی شود.
🔰 مثال:
💠 کلاس Employee

داخل کلاس متد equals را اورراید میکنیم و فیلد هارا با هم مقایسه میکنیم (البته بستگی به این داره که برابری از نظر شما چه شرایطی داشته باشد. توی این مثال من شرط برابری را برابر بودن فیلد ها قرار دادم).
(برای بهتر دیده شدن کد ها، گوشی را در حالت افقی نگه دارید)

public class Employee {
private String firstName;
private String lastName;

public Employee(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Employee a = (Employee) o;
return firstName.equals(a.firstName) && lastName.equals(a.lastName);
}
}

بعد از اورراید کردن متد، شرایط زیر را بررسی میکنیم:
() شرط اول: this == o به این معناست که اگر هر دو ابجکت به یک ادرس از حافظه اشاره کنند، یعنی با هم برابرند و مقدار ترو را برگرداند.

() شرط دوم: اگر ابجکت o از یک کلاس نباشد و یا مقدار null را داشته باشد، یعنی با هم برابر نیستند و مقدار فالس را برگرداند.

اگر شرط یک و دو با موفقیت پشت سر گذاشته شود، نوع o را که از نوع Object میباشد، به نوع Employee تغییر میدهیم (type casting) و سپس سراغ شرط آخر میرویم.

() شرط آخر: با توجه به برابر بودن یا نبودن فیلد های کلاس، مقدار ترو یا فالس را برمیگرداند.

🔰 بعنوان مثال با توجه به متد equals باید این دو ابجکت شرط برابری را داشته باشند:

Employee e1 = new Employee("A","B");
Employee e2 = new Employee("A","B");
System.out.println(e1.equals(e2));//returns true


#equals #object #hashCode #hash #inheritence

@pieceJava
👍5
💎 تفاوت equals و compareTo برای مقایسه رشته ها

🔆 هر دو متد برای مقایسه رشته کاربرد دارند ولی این بین تفاوت هایی وجود دارد. شاید بزرگترین تفاوت این باشد که equals ابجکت ها و comareTo حروف را با هم مقایسه میکند. طبق این قضیه میتوان نتیجه گرفت که در مقایسه ی null :

"foo".equals((String) null)
مقدار فالس را بازگشت میدهد. این در صورتی است که

"foo".compareTo( (String) null)
استثنای NullPointerException را به همراه خواهد داشت.

🔆 متد equals فقط دو مقدار false و true را بازگشت میدهد و آنهم زمانیست که مقدار دو رشته برابر یا نابرابر باشد. ضمنا همانطور که اشاره کردیم متد equals در هنگام مقایسه، از رخ دادن خطای NullPointerException جلو گیری میکند.

🔆 متد compareTo با توجه به اسناد جاوا، رشته ها را بصورت حرف به حرف (لغوی / lexographically) و همینطور از نظر طول رشته مقایسه میکند. طبق این مقایسه، این متد سه مقدار صفر، مثبت و منفی را بازگشت میدهد.

🔅مقدار صفر مختص زمانیست که رشته ها هم از لحاظ لغت و هم طول مقدار برابر داشته باشند.
🔅 مقدار منفی مختص زمانیست که رشته اول نسبت به رشته دوم طول کمتری داشته باشد.
🔅مقدار مثبت نیز مختص زمانیست که رشته اول نسبت به رشته دوم طول بیشتری داشته باشد

🔰 مثال:
⭕️ System.out.println("Aaaa".compareTo("Aa"));
یک مقدار مثبت را بازگشت میدهد. زیرا رشته اول نسبت به رشته دوم طول بیشتری دارد.

⭕️ System.out.println("Aa".compareTo("Aaaaa"));
یک مقدار منفی را برمیگرداند. زیرا رشته دوم نسبت به رشته اول طول بیشتری دارد.

⭕️ System.out.println("Aa".compareTo("Aa"));
مقدار صفر را دارد زیرا در این مقایسه رشته ها مقدار برابر را دارند.

⭕️ System.out.println("A".compareTo("B"));
در این مثال از آنجا که از نظر لغوی (lexographically) حرف "B" نسبت به حرف "A" در ترتیب الفبا جلوتر قرار گرفته است، خروجی مقدار منفی خواهد بود.
#equals #string #compareto #lexographically


@pieceJava
👍4