- Published on
انواع داده (Data Types) در زبان جاوا
- نویسندگان
- نام
- هومن امینی
- توییتر
- @HoomanAmini
در زبان جاوا، انواع دادهها برای تعریف و ذخیره اطلاعات استفاده میشوند. جاوا یک زبان تایپشده قوی (strongly typed) است، به این معنی که هر متغیر باید قبل از استفاده با نوع مشخصی تعریف شود. انواع دادهها در جاوا به دو دسته کلی تقسیم میشوند:
- دادههای اولیه (Primitive Data Types)
- دادههای غیر اولیه (Non-Primitive Data Types)
1. دادههای اولیه (Primitive Data Types)
دادههای اولیه، انواع ساده و اساسی دادهها هستند که توسط جاوا از پیش تعریف شدهاند. جاوا شامل 8 نوع داده اولیه است که به صورت زیر تقسیمبندی میشوند:
نوع داده | اندازه (بیت) | مقدار پیشفرض | محدوده مقادیر | توضیحات |
---|---|---|---|---|
byte | 8 | 0 | -128 تا 127 | برای ذخیره مقادیر کوچک عددی |
short | 16 | 0 | -32,768 تا 32,767 | برای مقادیر عددی متوسط |
int | 32 | 0 | -2,147,483,648 تا 2,147,483,647 | معمولترین نوع داده برای اعداد صحیح |
long | 64 | 0L | -9,223,372,036,854,775,808 تا 9,223,372,036,854,775,807 | برای اعداد صحیح بسیار بزرگ |
float | 32 | 0.0f | ~3.40282347E+38 | برای اعداد اعشاری دقیق متوسط |
double | 64 | 0.0d | ~1.7976931348623157E+308 | برای اعداد اعشاری دقیق بسیار بزرگ |
char | 16 | '�' | '�' تا '' | برای ذخیره یک کاراکتر (Unicode) |
boolean | 1 | false | true / false | برای مقادیر منطقی |
جزئیات بیشتر:
- عدد صحیح (Integer Types): شامل
byte
,short
,int
, وlong
است که برای ذخیره اعداد بدون اعشار استفاده میشوند. - اعشاری (Floating Point Types): شامل
float
وdouble
است و برای ذخیره اعداد اعشاری استفاده میشوند. - کاراکتر (Character Type): نوع داده
char
برای ذخیره یک کاراکتر یونیکد استفاده میشود. - منطقی (Boolean Type): نوع داده
boolean
فقط دو مقدارtrue
یاfalse
را نگه میدارد.
2. دادههای غیر اولیه (Non-Primitive Data Types)
دادههای غیر اولیه به دادههایی گفته میشود که از اشیاء (Objects) یا مراجع (References) استفاده میکنند. این نوع دادهها شامل آرایهها، رشتهها و کلاسها هستند. برخلاف دادههای اولیه، این نوع دادهها توسط برنامهنویس یا کتابخانهها تعریف میشوند.
مهمترین انواع دادههای غیر اولیه:
رشته (String):
- نوع داده
String
برای ذخیره رشتهها استفاده میشود. - رشتهها در جاوا به صورت کلاس تعریف شدهاند و یک شیء محسوب میشوند.
- مثال:
- نوع داده
String name = "Java Programming";
آرایه (Array):
- برای ذخیره مجموعهای از دادهها با یک نوع خاص استفاده میشود.
- مثال:
int[] numbers = {1, 2, 3, 4, 5};
کلاس (Class):
- کلاسها ساختارهای پیچیدهای هستند که توسط برنامهنویس تعریف میشوند و میتوانند شامل دادهها و متدها باشند.
- مثال:
class Person {
String name;
int age;
}
رابطههای پویا (Interfaces) و Enum:
- جاوا امکان تعریف انواع داده خاص از جمله
interface
وenum
را برای ساختارهای خاص و ثابت فراهم میکند.
مثالInterface
:- جاوا امکان تعریف انواع داده خاص از جمله
interface Animal {
void sound();
}
class Dog implements Animal {
public void sound() {
System.out.println("Bark");
}
}
public class InterfaceExample {
public static void main(String[] args) {
Animal myDog = new Dog();
myDog.sound();
}
}
در این مثال، Animal
یک interface
است که متدی به نام sound
تعریف میکند. کلاس Dog
این interface
را پیادهسازی کرده و متد sound
را به صورت Bark
تعریف میکند.
Enum
:
مثال enum Day {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}
public class EnumExample {
public static void main(String[] args) {
Day today = Day.MONDAY;
switch (today) {
case MONDAY:
System.out.println("Today is Monday");
break;
case FRIDAY:
System.out.println("Today is Friday");
break;
default:
System.out.println("Today is another day");
break;
}
}
}
در این مثال، Day
یک enum
است که روزهای هفته را تعریف میکند. با استفاده از enum
میتوانیم مقدارهای ثابت و مشخصی مانند روزهای هفته را تعریف و مدیریت کنیم.
مقایسه دادههای اولیه و غیر اولیه
ویژگی | دادههای اولیه | دادههای غیر اولیه |
---|---|---|
تعریفشده توسط جاوا | بله | خیر |
اندازه ثابت | بله | خیر (وابسته به شیء) |
ذخیره مستقیم داده | بله | خیر (مرجع به شیء) |
عملکرد | سریعتر | کندتر |
نوع داده پیشرفته: Wrapper Classes
جاوا برای هر نوع داده اولیه، یک کلاس مربوطه تعریف کرده است که به آن Wrapper Class میگویند. این کلاسها امکان استفاده از متدهای اضافی برای دادههای اولیه را فراهم میکنند.
نوع اولیه | Wrapper Class |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
کاربردهای Wrapper Classes:
تبدیل نوع داده اولیه به شیء (Boxing):
- Wrapper Classes به شما اجازه میدهند که دادههای اولیه را به شیء تبدیل کنید. این فرآیند به نام Boxing شناخته میشود.
- مثال:
int num = 10;
Integer numObject = Integer.valueOf(num); // Boxing
تبدیل شیء به نوع داده اولیه (Unboxing):
- میتوانید شیء Wrapper را دوباره به نوع داده اولیه تبدیل کنید که این فرآیند Unboxing نام دارد.
- مثال:
Integer numObject = 20;
int num = numObject.intValue(); // Unboxing
استفاده در Collection Framework:
- در جاوا، ساختارهای دادهای مانند
ArrayList
،HashMap
و دیگر مجموعهها فقط میتوانند اشیاء را ذخیره کنند. بنابراین، Wrapper Classes برای ذخیره دادههای اولیه در این ساختارها مورد استفاده قرار میگیرند. - مثال:
- در جاوا، ساختارهای دادهای مانند
ArrayList<Integer> numbers = new ArrayList<>();
numbers.add(5); // استفاده از Wrapper Class برای ذخیره عدد صحیح
متدهای کاربردی:
- Wrapper Classes شامل متدهای کاربردی زیادی هستند که به شما کمک میکنند تا عملیات مختلفی روی دادهها انجام دهید. به عنوان مثال، تبدیل رشته به عدد:
String str = "100";
int value = Integer.parseInt(str); // تبدیل رشته به عدد
مثال استفاده از Wrapper Class:
int num = 10;
Integer numObject = Integer.valueOf(num);
System.out.println(numObject.toString());
// Unboxing
int unboxedNum = numObject;
System.out.println("Unboxed Value: " + unboxedNum);
// استفاده در Collection
ArrayList<Double> heights = new ArrayList<>();
heights.add(175.5);
System.out.println("Height: " + heights.get(0));
استفاده از Wrapper Classes به شما این امکان را میدهد که با دادههای اولیه مانند اشیاء کار کنید و از امکانات پیشرفته جاوا برای مدیریت دادهها بهرهمند شوید.
نمونهکد: استفاده از انواع دادهها
public class DataTypesExample {
public static void main(String[] args) {
// دادههای اولیه
int age = 25;
double height = 175.5;
char initial = 'J';
boolean isStudent = true;
// دادههای غیر اولیه
String name = "John Doe";
int[] scores = {90, 85, 88};
// نمایش اطلاعات
System.out.println("Name: " + name);
System.out.println("Age: " + age);
System.out.println("Height: " + height + " cm");
System.out.println("Initial: " + initial);
System.out.println("Is Student: " + isStudent);
System.out.println("Scores: ");
for (int score : scores) {
System.out.println(score);
}
}
}
var
در جاوا
استفاده از در نسخه 10 جاوا، کلیدواژه var
معرفی شد که به شما اجازه میدهد نوع داده را به صورت خودکار تعیین کنید. این به معنی آن است که نیازی به مشخص کردن نوع داده به صورت صریح نیست و کامپایلر جاوا میتواند نوع داده را از مقدار انتسابی تعیین کند.
var
:
مثال استفاده از public class VarExample {
public static void main(String[] args) {
var number = 10; // نوع داده به صورت خودکار int تعیین میشود
var name = "Hello, Java!"; // نوع داده به صورت خودکار String تعیین میشود
var list = new ArrayList<String>(); // نوع داده به صورت خودکار ArrayList<String> تعیین میشود
System.out.println("Number: " + number);
System.out.println("Name: " + name);
list.add("Java");
System.out.println("List: " + list);
}
}
var
:
مزایا و معایب استفاده از مزایا:
- کد کوتاهتر و خواناتر: با استفاده از
var
، میتوانید از نوشتن نوع دادههای طولانی خودداری کنید و کد خواناتری داشته باشید. - انعطافپذیری بیشتر: به خصوص در مواقعی که نوع داده به راحتی از مقدار انتسابی قابل تشخیص است.
- کد کوتاهتر و خواناتر: با استفاده از
معایب:
- کاهش خوانایی در برخی موارد: اگر نوع داده از مقدار انتسابی مشخص نباشد، استفاده از
var
میتواند خوانایی کد را کاهش دهد. - عدم شفافیت: برنامهنویسان ممکن است در مواردی که نوع داده به وضوح مشخص نیست دچار سردرگمی شوند.
- کاهش خوانایی در برخی موارد: اگر نوع داده از مقدار انتسابی مشخص نباشد، استفاده از
استفاده از var
باید با دقت انجام شود تا تعادل بین خوانایی و سادگی کد حفظ شود.
نکات کلیدی
- مدیریت حافظه: دادههای اولیه به صورت مستقیم در حافظه ذخیره میشوند، در حالی که دادههای غیر اولیه به حافظه مرجع وابسته هستند.
- عملکرد: استفاده از دادههای اولیه سریعتر است، زیرا بدون سربار اضافی اجرا میشوند.
- کد تمیز: استفاده از Wrapper Classes و دادههای غیر اولیه کد خواناتر و توسعهپذیرتر میسازد.
- استفاده از
var
: میتواند کد را کوتاهتر کند، اما باید با دقت استفاده شود تا خوانایی کد حفظ شود.
a. آیا میخواهید نحوه استفاده از انواع دادهها در یک پروژه واقعی را توضیح دهم؟
b. آیا نیاز به توضیح بیشتر در مورد Wrapper Classes و کاربرد آنها دارید؟