Published on

انواع داده (Data Types) در زبان جاوا

نویسندگان

در زبان جاوا، انواع داده‌ها برای تعریف و ذخیره اطلاعات استفاده می‌شوند. جاوا یک زبان تایپ‌شده قوی (strongly typed) است، به این معنی که هر متغیر باید قبل از استفاده با نوع مشخصی تعریف شود. انواع داده‌ها در جاوا به دو دسته کلی تقسیم می‌شوند:

  1. داده‌های اولیه (Primitive Data Types)
  2. داده‌های غیر اولیه (Non-Primitive Data Types)

1. داده‌های اولیه (Primitive Data Types)

داده‌های اولیه، انواع ساده و اساسی داده‌ها هستند که توسط جاوا از پیش تعریف شده‌اند. جاوا شامل 8 نوع داده اولیه است که به صورت زیر تقسیم‌بندی می‌شوند:

نوع دادهاندازه (بیت)مقدار پیش‌فرضمحدوده مقادیرتوضیحات
byte80-128 تا 127برای ذخیره مقادیر کوچک عددی
short160-32,768 تا 32,767برای مقادیر عددی متوسط
int320-2,147,483,648 تا 2,147,483,647معمول‌ترین نوع داده برای اعداد صحیح
long640L-9,223,372,036,854,775,808 تا 9,223,372,036,854,775,807برای اعداد صحیح بسیار بزرگ
float320.0f~3.40282347E+38برای اعداد اعشاری دقیق متوسط
double640.0d~1.7976931348623157E+308برای اعداد اعشاری دقیق بسیار بزرگ
char16'�''�' تا '￿'برای ذخیره یک کاراکتر (Unicode)
boolean1falsetrue / 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) استفاده می‌کنند. این نوع داده‌ها شامل آرایه‌ها، رشته‌ها و کلاس‌ها هستند. برخلاف داده‌های اولیه، این نوع داده‌ها توسط برنامه‌نویس یا کتابخانه‌ها تعریف می‌شوند.

مهم‌ترین انواع داده‌های غیر اولیه:

  1. رشته (String):

    • نوع داده String برای ذخیره رشته‌ها استفاده می‌شود.
    • رشته‌ها در جاوا به صورت کلاس تعریف شده‌اند و یک شیء محسوب می‌شوند.
    • مثال:
     String name = "Java Programming";
  1. آرایه (Array):

    • برای ذخیره مجموعه‌ای از داده‌ها با یک نوع خاص استفاده می‌شود.
    • مثال:
     int[] numbers = {1, 2, 3, 4, 5};
  1. کلاس (Class):

    • کلاس‌ها ساختارهای پیچیده‌ای هستند که توسط برنامه‌نویس تعریف می‌شوند و می‌توانند شامل داده‌ها و متدها باشند.
    • مثال:
     class Person {
         String name;
         int age;
     }
  1. رابطه‌های پویا (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
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean

کاربردهای Wrapper Classes:

  1. تبدیل نوع داده اولیه به شیء (Boxing):

    • Wrapper Classes به شما اجازه می‌دهند که داده‌های اولیه را به شیء تبدیل کنید. این فرآیند به نام Boxing شناخته می‌شود.
    • مثال:
     int num = 10;
     Integer numObject = Integer.valueOf(num); // Boxing
  1. تبدیل شیء به نوع داده اولیه (Unboxing):

    • می‌توانید شیء Wrapper را دوباره به نوع داده اولیه تبدیل کنید که این فرآیند Unboxing نام دارد.
    • مثال:
Integer numObject = 20;
int num = numObject.intValue(); // Unboxing
  1. استفاده در Collection Framework:

    • در جاوا، ساختارهای داده‌ای مانند ArrayList، HashMap و دیگر مجموعه‌ها فقط می‌توانند اشیاء را ذخیره کنند. بنابراین، Wrapper Classes برای ذخیره داده‌های اولیه در این ساختارها مورد استفاده قرار می‌گیرند.
    • مثال:
ArrayList<Integer> numbers = new ArrayList<>();
numbers.add(5); // استفاده از Wrapper Class برای ذخیره عدد صحیح
  1. متدهای کاربردی:

    • 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 باید با دقت انجام شود تا تعادل بین خوانایی و سادگی کد حفظ شود.


نکات کلیدی

  1. مدیریت حافظه: داده‌های اولیه به صورت مستقیم در حافظه ذخیره می‌شوند، در حالی که داده‌های غیر اولیه به حافظه مرجع وابسته هستند.
  2. عملکرد: استفاده از داده‌های اولیه سریع‌تر است، زیرا بدون سربار اضافی اجرا می‌شوند.
  3. کد تمیز: استفاده از Wrapper Classes و داده‌های غیر اولیه کد خواناتر و توسعه‌پذیرتر می‌سازد.
  4. استفاده از var: می‌تواند کد را کوتاه‌تر کند، اما باید با دقت استفاده شود تا خوانایی کد حفظ شود.

a. آیا می‌خواهید نحوه استفاده از انواع داده‌ها در یک پروژه واقعی را توضیح دهم؟
b. آیا نیاز به توضیح بیشتر در مورد Wrapper Classes و کاربرد آن‌ها دارید؟