تیکه پاره های جاوا pinned «💎 مقایسه اشیا (ابجکت ها) در جاوا 🔆 توی جاوا هر کلاس بصورت پیشفرض از کلاس Object ارث بری میکند. کلاس Object شامل متد هایی مثل hashCode, equals, toString و... میشود که کاربرد گسترده ای در رابطه با کار با ابجکت ها دارند. به همین منظور برای مقایسه ابجکت ها از…»
💎چطور سازنده ها را بهم متصل کنیم؟ (Chaining Constructors)
⚙️ برای ایجاد ارتباط میان سازنده ها (کنستراکتور) دو حالت وجود دارد:
👈 اتصال سازنده ها در یک کلاس
👈 اتصال سازنده های سوپر کلاس در زیر کلاس
🔅 اتصال سازنده ها در یک کلاس
در این حالت از کلیدواژه this() استفاده میکنیم. در واقع this در این مورد اشاره به سازنده های کلاس دارد.(برای خوانایی بهتر کد صفحه را در حالت افقی نگه دارید):
💡ضمنا با توجه به ورودی هر سازنده، میتوان مشخص کرد که this دقیقا به کدام سازنده اشاره دارد
🔰برای مثال:
🔅 اتصال سازنده های سوپر کلاس در زیر کلاس
برای اینکار از کلیدواژه super استفاده میشود. ضمنا تمامی قوانین در رابطه با this ، برای super نیز برقرار است:
#chaining #constructor #this #super
@pieceJava
⚙️ برای ایجاد ارتباط میان سازنده ها (کنستراکتور) دو حالت وجود دارد:
👈 اتصال سازنده ها در یک کلاس
👈 اتصال سازنده های سوپر کلاس در زیر کلاس
🔅 اتصال سازنده ها در یک کلاس
در این حالت از کلیدواژه this() استفاده میکنیم. در واقع this در این مورد اشاره به سازنده های کلاس دارد.(برای خوانایی بهتر کد صفحه را در حالت افقی نگه دارید):
class Chaining{
private String firstname;
private int age;
private String lastname;
//first constructor
public Chaining(String firstname,String lastname)
{
this.firstname = firstname;
this.lastname = lastname;
}
//chaining constructors
public Chaining(int age,String firstname,String lastname){
this(firstname,lastname);
this.age = age;
}
}
در این مثال در بدنه سازنده دوم بوسیله کلیدواژه this به سازنده اول اشاره کرده ایم و مقادیر ورودی را به سازنده اول بوسیله کلیدواژه this نسبت داده ایم.💡ضمنا با توجه به ورودی هر سازنده، میتوان مشخص کرد که this دقیقا به کدام سازنده اشاره دارد
🔰برای مثال:
class Temp {
public Temp() {
// calls constructor 2
this(5);
System.out.println("The Default constructor");
}
// parameterized constructor 2
public Temp(int x) {
// calls constructor 3
this(5, 15);
System.out.println(x);
}
// parameterized constructor 3
public Temp(int x, int y) {
System.out.println(x * y);
}
}
❌ حتما به خاطر داشته باشید که برای اشاره (this) به سازنده های پیشین حتما باید اینکار در خط اول بعد از ایجاد سازنده جدید صورت گیرد زیرا در غیر این صورت خطای کمپایلر را بدنبال خواهد داشت.🔅 اتصال سازنده های سوپر کلاس در زیر کلاس
برای اینکار از کلیدواژه super استفاده میشود. ضمنا تمامی قوانین در رابطه با this ، برای super نیز برقرار است:
class SuperClass{
private String firstName;
private String lastName;
public SuperClass(String firstName,String lastName){
this.firstName = firstName;
this.lastName = lastName;
}
}
class Chaining extends SuperClass{
private int age;
public Chaining(String firstName, String lastName,int age) {
super(firstName, lastName);
this.age = age;
}
}
———#chaining #constructor #this #super
@pieceJava
👍2
💎بررسی مقدار و کلیدواژه null در جاوا
🔆 یکی از کلمات رزرو شده در جاوا کلمه null میباشد. مقدار null فقط مختص داده های مرجع میباشد. زمانی که یک شی از یک داده مرجع (Reference type) مقدار دهی نشده باشد (به هیچ خانه ای از حافظه اشاره نکند) بصورت پیشفرض مقدار اولیه آن برابر null خواهد بود.
🔰برای مثال:
🔅ویژگی های نال:
⭕️ کلیدواژه null حتما باید با حروف کوچک نوشته شود زیرا در غیر این صورت کمپایلر در شناسایی آن به مشکل خواهد خورد.
⭕️ همانطور که پیش تر نیز اشاره کردیم، مقدار null مختص داده های مرجع میباشد و در صورت اختصاص به داده های نوع پیشین (primitive data types) خطای کمپایلر را به همراه خواهد داشت:
⭕️ از آنجا که نال یک مقدار خاص میباشد، میتواند به انواع داده های مرجع نیز تبدیل شود:
⭕️ یکی از اپراتور های جاوا instanceof میباشد که بررسی میکند آیا یک ابجکت نمونه ای از یک کلاس هست یا خیر. برای مثال:
@pieceJava
🔆 یکی از کلمات رزرو شده در جاوا کلمه null میباشد. مقدار null فقط مختص داده های مرجع میباشد. زمانی که یک شی از یک داده مرجع (Reference type) مقدار دهی نشده باشد (به هیچ خانه ای از حافظه اشاره نکند) بصورت پیشفرض مقدار اولیه آن برابر null خواهد بود.
🔰برای مثال:
public class ITHOOLOO {
private static Object object;
public static void main(String[] args) {
System.out.println(object);
}
}
خروجی نال را خواهد داشت. زیرا شی مقدار دهی نشده است. 🔅ویژگی های نال:
⭕️ کلیدواژه null حتما باید با حروف کوچک نوشته شود زیرا در غیر این صورت کمپایلر در شناسایی آن به مشکل خواهد خورد.
⭕️ همانطور که پیش تر نیز اشاره کردیم، مقدار null مختص داده های مرجع میباشد و در صورت اختصاص به داده های نوع پیشین (primitive data types) خطای کمپایلر را به همراه خواهد داشت:
int a = null; //error⭕️مقدار پیشفرض هر داده مرجع (رفرنس، reference) پیش از مقدار دهی نال میباشد.
⭕️ از آنجا که نال یک مقدار خاص میباشد، میتواند به انواع داده های مرجع نیز تبدیل شود:
// Typecasting null to String type⭕️تلاش برای دسترسی به یک آبجکت نال استثنای NullPointerException را به همراه خواهد داشت. برای مثال پیمایش آرایه ای از ابجکت ها (اشیا) که شامل یک یا چند ابجکت نال باشد. در حین پیمایش، زمانی که حلقه به آبجکت نال برخورد کرد، اسثتنای NullPointerException رخ میدهد
String myStr = (String) null;
// Typecasting to an Integer class
Integer myItr = (Integer) null;
// Typecasting to a Double class
Double myDbl = (Double) null;
⭕️ یکی از اپراتور های جاوا instanceof میباشد که بررسی میکند آیا یک ابجکت نمونه ای از یک کلاس هست یا خیر. برای مثال:
public class ITHOOLOO {
public static void main(String[] args) {
Object a = new Object();
System.out.println(a instanceof Object);
}
}
مقدار ترو را برمیگرداند زیرا a یک شی (ابجکت) از کلاس Object میباشد. حال اگر مقدار یک ابجکت null باشد، در بررسی با اپراتور instanceof مقدار فالس بازگشت میدهد. این نشان میدهد که null به معنای هیچ است. یعنی هیچ خانه ای در حافظه به ابجکت ساخته شده اختصاص داده نشده است:public class ITHOOLOO {
public static void main(String[] args) {
Integer b = null;
System.out.println(b instanceof Integer);//return false
}
}
#null #nullpointerException #instanceof@pieceJava
👍4
💎 کلاس Scanner و متد هایuserDelimeter و delimeter
🔆 همانطور که میدانید، کلاس اسکنر برای خواندن داده های ورودی کاربرد دارد. برای مثال برای هر کدام از ورودی های از نوع اینتجر، دابل، استرینگ و... کلاس اسکنر متد هایی را فراهم کرده است.
🔅یکی از متد های پر کاربرد کلاس Scanner، متد useDelimeter میباشد. بوسیله ی این متد میتوان یک جداکننده برای داده ورودی در نظر گرفت. برای مثال "," را جدا کننده رشته "Hello,From,ITHOOLOO" قرار میدیم و ورودی هارو چاپ میکنیم:
🔰برای مثال:
فرض کنید یک فایل در زیرشاخه src به نام test.txt داریم که شامل رشته زیر میباشد:
Mohammad,23,Iran
حال برای خواندن و ذخیره اطلاعات داریم:
@pieceJava
🔆 همانطور که میدانید، کلاس اسکنر برای خواندن داده های ورودی کاربرد دارد. برای مثال برای هر کدام از ورودی های از نوع اینتجر، دابل، استرینگ و... کلاس اسکنر متد هایی را فراهم کرده است.
🔅یکی از متد های پر کاربرد کلاس Scanner، متد useDelimeter میباشد. بوسیله ی این متد میتوان یک جداکننده برای داده ورودی در نظر گرفت. برای مثال "," را جدا کننده رشته "Hello,From,ITHOOLOO" قرار میدیم و ورودی هارو چاپ میکنیم:
import java.util.Scanner;در این صورت خروجی به صورت زیر خواهد بود:
public class ITHOOLOO {
public static void main(String[] args) {
String text = "HELLO,FROM,ITHOOLOO";
Scanner input = new Scanner(text);
input.useDelimiter(",");
while(input.hasNext())
{
System.out.println(input.next());
}
}
}
HELLO💡متد delimeter جدا کننده را برگشت میدهد:
FROM
ITHOOLOO
input.delimiter(); // return ,
⭕️ یکی از کاربرد های useDelimeter در هنگام خواندن فایل و جدا کردن داده ها میباشد.🔰برای مثال:
فرض کنید یک فایل در زیرشاخه src به نام test.txt داریم که شامل رشته زیر میباشد:
Mohammad,23,Iran
حال برای خواندن و ذخیره اطلاعات داریم:
public class ITHOOLOO {
public static void main(String[] args) {
File file = new File("src\\Test.txt");
String name = "";
int age = 0;
String country = "";
Scanner input = null;
try {
input = new Scanner(file);
input.useDelimiter(",");
while(input.hasNext())
{
name = input.next();
age = Integer.parseInt(input.next());
country = input.next();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}finally {
if(input!=null)
input.close();
}
System.out.println(name);
System.out.println(age);
System.out.println(country);
}
}
در این مثال خروجی بصورت زیر خواهد بود:Mohammad#scanner #delimeter #useDelimeter
23
Iran
@pieceJava
👍3
💎 داده های نوع پیشین و داده های مرجع
📝 #سوالات_مصاحبه
🔆داده های نوع پیشین (Primitive data types)
⭕️داده های نوع پیشین عبارتند از :
byte, boolean, char, short, int ,float, long , double
⭕️داده های نوع پیشین همیشه یک مقدار ذخیره دارند. اگر مقدار دهی نشده باشند، یک مقدار پیشفرض خواهند داشت. البته این مقدار پیش فرض مختص متغیر های نمونه ای هست که در سطح کلاس تعریف میشوند و متغیر های محلی که در یک بلاک کد تعریف میشوند، بطور خودکار هیچ مقدار پیشفرضی ندارند و شما پیش از استفاده باید آن را مقدار دهی کنید.
⭕️وجه تمایز بین داده long و int ، حرف L (یا l اِل کوچک)میباشد که آخر عدد اضافه میشود. حرف L نشاندهنده نوع داده long میباشد.
⭕️وجه تمایز بین داده float و double، حرف F(یا f کوچک) میباشد که بعد از عدد اعشاری برای داده فلوت به کار برده میشود. به همین صورت برای متغیر double میتوان بعد از عدد حرف D (یا d) قرار داد.
⭕️اختصاص یک داده نوع پیشین به یک متغیر، باعث ذخیره یک کپی از داده در متغیر خواهد شد:
🔆داده های مرجع (reference data types / non-primitive data types)
⭕️داده های مرجع شامل تمامی داده ها غیر از داده های نوع پیشین میباشد.
⭕️داده های نوع مرجع بعنوان اشیا (objects) شناخته میشوند.
⭕️داده های مرجع در واقع به یک خانه از حافظه اشاره میکنند.
⭕️برای یک داده مرجع در صورتی که تعریف نشده باشد، مقدار null تعلق میگیرد.
⭕️داده های مرجع (اشیا) شامل متغیر ها و متد ها میشوند که وضعیت و رفتار شی ساخته شده را تعریف میکنند.
⭕️زمانی که یک داده مرجع به یک داده دیگر نسبت داده میشود، در این صورت هر دو به یک خانه از حافظه اشاره میکنند و کپی ایجاد نمیشود. این به این معناست که هر تغییر در ابجکت دوم، ابجکت اول را هم دچار تغییر میکند:
(⁉️) سوالات:
❓داده نوع پیشین چیست؟
❓اگر به داده نوع پیشین مقداری نسبت داده نشود، چه مقداری در متغیر ذخیره خواهد شد؟
❓پیشوند های D و F و L به ترتیب برای کدام داده ها و چرا به کار میروند؟
❓ اگر که یک داده پیشین به داده پیشین دیگر نسبت دهیم چه اتفاقی خواهد افتاد؟
❓داده مرجع چیست؟
❓ اگر که یک داده مرجع را به داده مرجع دیگر نسبت دهیم چه اتفاقی خواهد افتاد؟
❓تفاوت داده مرجع و داده نوع پیشین را توضیح دهید؟
❓هدف از نوشتن متدها و متغیر در داده های مرجع چیست؟
❓اگر داده مرجع مقدار دهی نشود، بصورت پیشفرض چه مقداری در بر میگیرد؟
#primitive #reference #dataTypes #data_types #primitive_data
@pieceJava
📝 #سوالات_مصاحبه
🔆داده های نوع پیشین (Primitive data types)
⭕️داده های نوع پیشین عبارتند از :
byte, boolean, char, short, int ,float, long , double
⭕️داده های نوع پیشین همیشه یک مقدار ذخیره دارند. اگر مقدار دهی نشده باشند، یک مقدار پیشفرض خواهند داشت. البته این مقدار پیش فرض مختص متغیر های نمونه ای هست که در سطح کلاس تعریف میشوند و متغیر های محلی که در یک بلاک کد تعریف میشوند، بطور خودکار هیچ مقدار پیشفرضی ندارند و شما پیش از استفاده باید آن را مقدار دهی کنید.
⭕️وجه تمایز بین داده long و int ، حرف L (یا l اِل کوچک)میباشد که آخر عدد اضافه میشود. حرف L نشاندهنده نوع داده long میباشد.
⭕️وجه تمایز بین داده float و double، حرف F(یا f کوچک) میباشد که بعد از عدد اعشاری برای داده فلوت به کار برده میشود. به همین صورت برای متغیر double میتوان بعد از عدد حرف D (یا d) قرار داد.
⭕️اختصاص یک داده نوع پیشین به یک متغیر، باعث ذخیره یک کپی از داده در متغیر خواهد شد:
int x = 4;
int y = x;
🔆داده های مرجع (reference data types / non-primitive data types)
⭕️داده های مرجع شامل تمامی داده ها غیر از داده های نوع پیشین میباشد.
⭕️داده های نوع مرجع بعنوان اشیا (objects) شناخته میشوند.
⭕️داده های مرجع در واقع به یک خانه از حافظه اشاره میکنند.
⭕️برای یک داده مرجع در صورتی که تعریف نشده باشد، مقدار null تعلق میگیرد.
⭕️داده های مرجع (اشیا) شامل متغیر ها و متد ها میشوند که وضعیت و رفتار شی ساخته شده را تعریف میکنند.
⭕️زمانی که یک داده مرجع به یک داده دیگر نسبت داده میشود، در این صورت هر دو به یک خانه از حافظه اشاره میکنند و کپی ایجاد نمیشود. این به این معناست که هر تغییر در ابجکت دوم، ابجکت اول را هم دچار تغییر میکند:
class myClass{
String name;
}
class Main{
public static void main(String[] args){
Class o1 = new Class();
Class o2 = o1;
o2.name = "Object Name";
System.out.println(o1.name);//prints Object Name
}
}
❌ در مثال بالا هر چند که مقدار ابجکت o2 را تغییر داده ایم ولی از آنجا که هر دو ابجکت به یک خانه از حافظه اشاره میکنند، این تغییر باعث میشود که o1 نیز دچار تغییر شود.(⁉️) سوالات:
❓داده نوع پیشین چیست؟
❓اگر به داده نوع پیشین مقداری نسبت داده نشود، چه مقداری در متغیر ذخیره خواهد شد؟
❓پیشوند های D و F و L به ترتیب برای کدام داده ها و چرا به کار میروند؟
❓ اگر که یک داده پیشین به داده پیشین دیگر نسبت دهیم چه اتفاقی خواهد افتاد؟
❓داده مرجع چیست؟
❓ اگر که یک داده مرجع را به داده مرجع دیگر نسبت دهیم چه اتفاقی خواهد افتاد؟
❓تفاوت داده مرجع و داده نوع پیشین را توضیح دهید؟
❓هدف از نوشتن متدها و متغیر در داده های مرجع چیست؟
❓اگر داده مرجع مقدار دهی نشود، بصورت پیشفرض چه مقداری در بر میگیرد؟
#primitive #reference #dataTypes #data_types #primitive_data
@pieceJava
👍3
💎تفاوت پیش افزاینده و پس افزاینده در جاوا
🔅 پس افزاینده (Post-Increment ) زمانی مناسب است که قرار باشد از مقدار فعلی داده استفاده و سپس مقدار داده افزایش پیدا کند.
🔰برای مثال:
🔰برای مثال:
@pieceJava
🔅 پس افزاینده (Post-Increment ) زمانی مناسب است که قرار باشد از مقدار فعلی داده استفاده و سپس مقدار داده افزایش پیدا کند.
🔰برای مثال:
int i = 1;🔅 پیش افزاینده (Pre-Increment) بر خلاف پس افزاینده زمانی مناسب است که قرار باشد مقدار فعلی را افزایش و سپس استفاده کنیم.
System.out.println(i++); // prints 1
System.out.println(i); // prints 2
🔰برای مثال:
int i = 1;
System.out.println(++i);// prints 2
System.out.println(i); // prints 2
#increment @pieceJava
👍2
💎 مفهوم استخر رشته (String pool) و کارایی آن در جاوا
🔆 همانطور که میدانید رشته ها از نوع داده مرجع میباشند و هر داده مرجع برای ایجاد شدن هم از لحاظ زمان و هم حافظه هزینه بر است. یکی از راه هایی که در جهت بهینه سازی این موضوع بکار برده شده است، بوجود آوردن استخر رشته (String pool) است. پیش از آنکه این مفهوم را بررسی کنیم، اجازه دهید به نحوه ایجاد رشته ها در جاوا بپردازیم. در جاوا به دو صورت میتوان رشته ایجاد کرد:
⭕️ ذخیره مستقیم رشته بصورت یک ثابت :
⭕️ تعریف رشته بوسیله ی کلیدواژه new:
🔆 استخر رشته:
همانطور که گفتیم در جهت بهینه سازی در هزینه، هر بار که یک رشته لیترال ایجاد میکنیم، JVM بررسی میکند که آیا در استخر رشته، رشته مشابه وجود دارد یا خیر. در صورت وجود آدرس رشته تکراری را برگشت میدهد و در غیر اینصورت آن را در استخر رشته ایجاد میکند. در نتیجه دلیل برابری رشته اول و سوم به این خاطر میباشد که در حافظه هر دو به یک آدرس مراجعه میکنند. اما کلیدواژه new یک ابجکت جدا ایجاد میکند و از آنجا که هر دو رشته دو آدرس متفاوت دارند، نتیجه مقایسه == برابر فالس میشود.
💡 برای مقایسه رشته ها بهتر است از متد equals و یا compareTo استفاده شود.
🔗 نحوه صحیح مقایسه رشته ها
🔗 کلاس های Immutable و Mutable
🔗 چرا رشته ها غیر قابل تغییر یا Immutable هستند
🔆 همانطور که میدانید رشته ها از نوع داده مرجع میباشند و هر داده مرجع برای ایجاد شدن هم از لحاظ زمان و هم حافظه هزینه بر است. یکی از راه هایی که در جهت بهینه سازی این موضوع بکار برده شده است، بوجود آوردن استخر رشته (String pool) است. پیش از آنکه این مفهوم را بررسی کنیم، اجازه دهید به نحوه ایجاد رشته ها در جاوا بپردازیم. در جاوا به دو صورت میتوان رشته ایجاد کرد:
⭕️ ذخیره مستقیم رشته بصورت یک ثابت :
String str = "ITHOOLOO";
💡به این نوع رشته ها، لیترال گفته میشود (String literal)⭕️ تعریف رشته بوسیله ی کلیدواژه new:
String str2 = new String("ITHOOLOO");
حال اگر رشته سومی با مقدار تکراری داشته باشیم:String str3 = "ITHOOLOO";
در این صورت خواهیم داشت:System.out.println(str==str2); //false
System.out.println(str==str3); // true
System.out.println(str2==str3); // false
دلیل برابری رشته اول و سوم به مفهوم استخر رشته برمیگردد.🔆 استخر رشته:
همانطور که گفتیم در جهت بهینه سازی در هزینه، هر بار که یک رشته لیترال ایجاد میکنیم، JVM بررسی میکند که آیا در استخر رشته، رشته مشابه وجود دارد یا خیر. در صورت وجود آدرس رشته تکراری را برگشت میدهد و در غیر اینصورت آن را در استخر رشته ایجاد میکند. در نتیجه دلیل برابری رشته اول و سوم به این خاطر میباشد که در حافظه هر دو به یک آدرس مراجعه میکنند. اما کلیدواژه new یک ابجکت جدا ایجاد میکند و از آنجا که هر دو رشته دو آدرس متفاوت دارند، نتیجه مقایسه == برابر فالس میشود.
💡 برای مقایسه رشته ها بهتر است از متد equals و یا compareTo استفاده شود.
🔗 نحوه صحیح مقایسه رشته ها
🔗 کلاس های Immutable و Mutable
🔗 چرا رشته ها غیر قابل تغییر یا Immutable هستند
Telegram
تیکه پاره های جاوا
💎 تفاوت equals و compareTo برای مقایسه رشته ها
🔆 هر دو متد برای مقایسه رشته کاربرد دارند ولی این بین تفاوت هایی وجود دارد. شاید بزرگترین تفاوت این باشد که equals ابجکت ها و comareTo حروف را با هم مقایسه میکند. طبق این قضیه میتوان نتیجه گرفت که در مقایسه…
🔆 هر دو متد برای مقایسه رشته کاربرد دارند ولی این بین تفاوت هایی وجود دارد. شاید بزرگترین تفاوت این باشد که equals ابجکت ها و comareTo حروف را با هم مقایسه میکند. طبق این قضیه میتوان نتیجه گرفت که در مقایسه…
👍4
تیکه پاره های جاوا
💎 مفهوم استخر رشته (String pool) و کارایی آن در جاوا 🔆 همانطور که میدانید رشته ها از نوع داده مرجع میباشند و هر داده مرجع برای ایجاد شدن هم از لحاظ زمان و هم حافظه هزینه بر است. یکی از راه هایی که در جهت بهینه سازی این موضوع بکار برده شده است، بوجود آوردن…
مثال از مفهوم String pool
@pieceJava
@pieceJava
👍3
#چرا
💎چرا رشته ها غیر قابل تغییر یا Immutable هستند؟
در مورد Immutable و Mutable بودن کلاس ها از اینجا بخوانید.
فرض کنید رشته ای بصورت زیر داریم:
⭕️ فرض کنید چند رشته لیترال داشتیم که هر کدام فقط به یک خانه از حافظه اشاره میکردند. حال اگر مقدار یکی از رشته ها را به اینصورت تغییر دهیم، این تغییر باقی رشته ها را تحت تاثیر قرار میداد.
⭕️ غیر قابل تغییر بودن رشته ها در مدیریت حافظه نیز تاثیر دارد. (از اینجا بخوانید)
💎چرا رشته ها غیر قابل تغییر یا Immutable هستند؟
در مورد Immutable و Mutable بودن کلاس ها از اینجا بخوانید.
فرض کنید رشته ای بصورت زیر داریم:
String str = "Hello";
حال بوسیله متد concat یک رشته را به رشته فعلی اضافه میکنیم:str.concat(" World");
و در نهایت از رشته تولید شده خروجی میگیریم:System.out.println(str);
خروجی مثال بالا همان رشته Hello خواهد بود. این موضوع به غیر قابل تغییر بودن رشته ها برمیگردد. در واقع در سطح حافظه رشته Hello World ایجاد شده است. اما رشته فعلی همچنان به خانه قبلی در حافظه اشاره میکند. برای ارجاع به ادرس جدید، الحاق رشته باید بصورت زیر انجام شود:str = str.concat(" World");
در این صورت خروجی زیر برابر با Hello World خواهد بود:System.out.println(str);
❓چرا رشته ها غیر قابل تغییر هستند؟⭕️ فرض کنید چند رشته لیترال داشتیم که هر کدام فقط به یک خانه از حافظه اشاره میکردند. حال اگر مقدار یکی از رشته ها را به اینصورت تغییر دهیم، این تغییر باقی رشته ها را تحت تاثیر قرار میداد.
⭕️ غیر قابل تغییر بودن رشته ها در مدیریت حافظه نیز تاثیر دارد. (از اینجا بخوانید)
Telegram
تیکه پاره های جاوا
💎معنی Mutable و Immutable بودن کلاس ها (قابل تغییر و غیر قابل تغییر بودن)
🔅به آبجکت هایی که بعد از ایجاد شدن قابل تغییر هستند، Mutable گفته میشود. برای مثال کلاس Date یا StringBuilder
🔅در مقابل به ابجکت هایی که پس از ایجاد شدن قابل تغییر نیستند، Immutable…
🔅به آبجکت هایی که بعد از ایجاد شدن قابل تغییر هستند، Mutable گفته میشود. برای مثال کلاس Date یا StringBuilder
🔅در مقابل به ابجکت هایی که پس از ایجاد شدن قابل تغییر نیستند، Immutable…
👍7
تیکه پاره های جاوا
#چرا 💎چرا رشته ها غیر قابل تغییر یا Immutable هستند؟ در مورد Immutable و Mutable بودن کلاس ها از اینجا بخوانید. فرض کنید رشته ای بصورت زیر داریم: String str = "Hello"; حال بوسیله متد concat یک رشته را به رشته فعلی اضافه میکنیم: str.concat(" World"); و در…
مثال از مفهوم غیر قابل تغییر بودن رشته ها
@pieceJava
@pieceJava
👍4
💎 کلاس Object در جاوا
هر کلاس جاوا بصورت مستقیم یا غیر مستقیم از کلاس Object ارث بری میکند. این به این معناست که هر کلاسی میتواند متد های کلاس Object را که به نحوی private یا final نیستند، اورراید کند.
⭕️متد HashCode مقدار هش کد را برای شی بازگشت میدهد.
⭕️متد equals برابری دو شی را بررسی میکند 🔗 (درباره مقایسه ابجکت ها(اشیا) و هش کد از اینجا بخوانید)
⭕️متد clone یک کپی از شی مورد نظر ایجاد میکند. البته برای clone کردن، کلاس مورد نظر باید اینترفیس Cloneable را پیاده سازی و از این کلاس متد clone() را تعریف کند.
⭕️متد toString رشته ای را در مورد شی ایجاد شده بازگشت میدهد. این رشته میتواند اطلاعات شی یا هرچیز دیگری باشد. برای مثال بصورت پیشفرض متد toString رشته @هش کد را بازگشت میدهد.
⭕️متد finalize متدی است که بصورت خودکار توسط گاربیج کالکشن قبل از حذف و از بین بردن شی صدا زده میشود. برای مثال زمانی که یک شی از هیچ یک از منابع استفاده نکند و هیچ شیی به آن مراجعه نکند، بصورت خودکار توسط گاربیج کالکشن برای ازاد سازی و مدیریت حافظه، حذف خواهد شد.
هر کلاس جاوا بصورت مستقیم یا غیر مستقیم از کلاس Object ارث بری میکند. این به این معناست که هر کلاسی میتواند متد های کلاس Object را که به نحوی private یا final نیستند، اورراید کند.
⭕️متد HashCode مقدار هش کد را برای شی بازگشت میدهد.
⭕️متد equals برابری دو شی را بررسی میکند 🔗 (درباره مقایسه ابجکت ها(اشیا) و هش کد از اینجا بخوانید)
⭕️متد clone یک کپی از شی مورد نظر ایجاد میکند. البته برای clone کردن، کلاس مورد نظر باید اینترفیس Cloneable را پیاده سازی و از این کلاس متد clone() را تعریف کند.
⭕️متد toString رشته ای را در مورد شی ایجاد شده بازگشت میدهد. این رشته میتواند اطلاعات شی یا هرچیز دیگری باشد. برای مثال بصورت پیشفرض متد toString رشته @هش کد را بازگشت میدهد.
⭕️متد finalize متدی است که بصورت خودکار توسط گاربیج کالکشن قبل از حذف و از بین بردن شی صدا زده میشود. برای مثال زمانی که یک شی از هیچ یک از منابع استفاده نکند و هیچ شیی به آن مراجعه نکند، بصورت خودکار توسط گاربیج کالکشن برای ازاد سازی و مدیریت حافظه، حذف خواهد شد.
Telegram
تیکه پاره های جاوا
💎 مقایسه اشیا (ابجکت ها) در جاوا
🔆 توی جاوا هر کلاس بصورت پیشفرض از کلاس Object ارث بری میکند. کلاس Object شامل متد هایی مثل hashCode, equals, toString و... میشود که کاربرد گسترده ای در رابطه با کار با ابجکت ها دارند. به همین منظور برای مقایسه ابجکت ها از…
🔆 توی جاوا هر کلاس بصورت پیشفرض از کلاس Object ارث بری میکند. کلاس Object شامل متد هایی مثل hashCode, equals, toString و... میشود که کاربرد گسترده ای در رابطه با کار با ابجکت ها دارند. به همین منظور برای مقایسه ابجکت ها از…
👍5
تیکه پاره های جاوا
Photo
💎 کلاس Wrapper ها و مفهوم Unboxing و Auto-Boxing
🔆در جاوا کلاس wrapper (به فارسی کلاس پوشاننده یا کلاس بسته بندی کننده) به کلاس هایی گفته میشود که هشت داده ی نوع پیشین را به شی تبدیل میکند. لیست کلاس wrapper ها در تصویر بالا قابل مشاهده است.
🔰برای مثال برای تبدیل داده int به Integer از متد زیر استفاده میشود:
int x = 475;
Integer number = Integer.valueOf(x);
🛑 به این شیوه از تبدیل autoBoxing گفته میشود.
در این مورد برای تبدیلدوباره شی ایجاد شده به داده نوع پیشین از متد IntValue استفاده میشود:
int y =number.intValue();
🛑 به این شیوه از تبدیل شی به داده نوع پیشین، unboxing گفته میشود
💡البته در نسخه های اخیر جاوا نیازی به استفاده از این متد ها برای تبدیل نیست. این تغییر مقدار بصورت خودکار توسط کمپایلر انجام میشود:
Integer number = 475; //auto-boxing
int y = number; //unboxing
⁉️ چرا از کلاس wrapper ها استفاده کنیم؟
⭕️ بعضی از ساختار ها بجای داده های نوع پیشین با اشیا سروکار دارند. برای مثال کالکشن ها مانند اری لیست، لینک لیست و ... در نتیجه برای استفاده لازم است که داده های نوع پیشین را بوسیله ی کلاس wrapper ها به شی تبدیل کنید:
ArrayList<Integer> list = new ArrayList<>();
⭕️ از انجا که این داده ها به شی تبدیل میشوند، میتوان مقدار ذخیره ی آن را برابر null قرار داد.
Integer number = null;
⭕️یکی از متد های پرکاربرد در این کلاس ها متد ...parse میباشد. متد parse... برای تبدیل رشته به داده دیگر کاربرد دارد.
برای مثال:
int x = Integer.parseInt("475");//Converts String to integer
double y = Double.parseDouble("12.3");
💡 البته از لحاظ کارآمدی داده های نوع پیشین بیشتر کارآمد خواهند بود. پیشنهاد میشود که فقط در صورت لزوم از کلاس Wrapper ها به جای داده های نوع پیشین استفاده کنید.
#Wrapper #Integer #parseInt #parse #unboxing #AutoBoxing
@pieceJava
🔆در جاوا کلاس wrapper (به فارسی کلاس پوشاننده یا کلاس بسته بندی کننده) به کلاس هایی گفته میشود که هشت داده ی نوع پیشین را به شی تبدیل میکند. لیست کلاس wrapper ها در تصویر بالا قابل مشاهده است.
🔰برای مثال برای تبدیل داده int به Integer از متد زیر استفاده میشود:
int x = 475;
Integer number = Integer.valueOf(x);
🛑 به این شیوه از تبدیل autoBoxing گفته میشود.
در این مورد برای تبدیلدوباره شی ایجاد شده به داده نوع پیشین از متد IntValue استفاده میشود:
int y =number.intValue();
🛑 به این شیوه از تبدیل شی به داده نوع پیشین، unboxing گفته میشود
💡البته در نسخه های اخیر جاوا نیازی به استفاده از این متد ها برای تبدیل نیست. این تغییر مقدار بصورت خودکار توسط کمپایلر انجام میشود:
Integer number = 475; //auto-boxing
int y = number; //unboxing
⁉️ چرا از کلاس wrapper ها استفاده کنیم؟
⭕️ بعضی از ساختار ها بجای داده های نوع پیشین با اشیا سروکار دارند. برای مثال کالکشن ها مانند اری لیست، لینک لیست و ... در نتیجه برای استفاده لازم است که داده های نوع پیشین را بوسیله ی کلاس wrapper ها به شی تبدیل کنید:
ArrayList<Integer> list = new ArrayList<>();
⭕️ از انجا که این داده ها به شی تبدیل میشوند، میتوان مقدار ذخیره ی آن را برابر null قرار داد.
Integer number = null;
⭕️یکی از متد های پرکاربرد در این کلاس ها متد ...parse میباشد. متد parse... برای تبدیل رشته به داده دیگر کاربرد دارد.
برای مثال:
int x = Integer.parseInt("475");//Converts String to integer
double y = Double.parseDouble("12.3");
💡 البته از لحاظ کارآمدی داده های نوع پیشین بیشتر کارآمد خواهند بود. پیشنهاد میشود که فقط در صورت لزوم از کلاس Wrapper ها به جای داده های نوع پیشین استفاده کنید.
#Wrapper #Integer #parseInt #parse #unboxing #AutoBoxing
@pieceJava
👍6