آموزش Java به صورت پروژه‌محور: سریع، کاربردی و حرفه‌ای |جلسه چهاردهم : تبدیل نوع (Type Casting) در جاوا
برنامه نویسی جاوا

آموزش Java به صورت پروژه‌محور: سریع، کاربردی و حرفه‌ای |جلسه چهاردهم : تبدیل نوع (Type Casting) در جاوا

تبدیل نوع در جاوا

تبدیل نوع (Type Casting) تکنیکی است که یا توسط کامپایلر یا توسط برنامه‌نویس برای تبدیل یک نوع داده به نوع دیگر در زبان جاوا استفاده می‌شود. تبدیل نوع همچنین با عنوان تبدیل نوع داده (Type Conversion) نیز شناخته می‌شود. برای مثال، تبدیل int به double، double به int، short به int و غیره.

در زبان برنامه‌نویسی جاوا، دو نوع تبدیل نوع مجاز وجود دارد:

  • تبدیل نوع گسترده (Widening Type Casting)
  • تبدیل نوع محدود (Narrowing Type Casting)

تبدیل نوع گسترده (Widening Type Casting)

تبدیل نوع گسترده که به آن تبدیل نوع ضمنی (Implicit Type Casting) نیز گفته می‌شود، زمانی است که یک نوع کوچکتر به یک نوع بزرگتر تبدیل می‌شود و این کار به‌صورت خودکار توسط کامپایلر انجام می‌گیرد.

سلسله‌مراتب

در اینجا سلسله‌مراتب تبدیل نوع گسترده در جاوا آورده شده است:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
byte>short>char>int>long>float>double
byte>short>char>int>long>float>double
byte>short>char>int>long>float>double

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

مثال

در این مثال، یک عدد صحیح (integer) و یک عدد اعشاری (double) را با هم جمع کرده و نتیجه را در یک متغیر از نوع double ذخیره می‌کنیم تا مجموع را نمایش دهیم. در حین جمع، عدد صحیح به طور ضمنی به نوع double تبدیل می‌شود:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
package com.tutorialspoint;
public class Tester {
// Main driver method
public static void main(String[] args) {
// Define int variables
int num1 = 5004;
double num2 = 2.5;
double sum = num1 + num2;
// show output
System.out.println("The sum of " + num1 + " and " + num2 + " is " + sum);
}
}
package com.tutorialspoint; public class Tester { // Main driver method public static void main(String[] args) { // Define int variables int num1 = 5004; double num2 = 2.5; double sum = num1 + num2; // show output System.out.println("The sum of " + num1 + " and " + num2 + " is " + sum); } }
package com.tutorialspoint;

public class Tester {
   // Main driver method
   public static void main(String[] args) {
      // Define int variables
      int num1 = 5004;
      double num2 = 2.5;
      double sum = num1 + num2;
      // show output
      System.out.println("The sum of " + num1 + " and " + num2 + " is " + sum);
   }
}

کد را کامپایل و اجرا کنید. این کار نتیجه زیر را تولید می‌کند:

خروجی

مجموع 5004 و 2.5 برابر با 5006.5 است خطای تبدیل نوع

خطای تبدیل

خطای تبدیل نوع زمانی رخ می‌دهد که سعی کنید یک مقدار از نوع داده بزرگتر را به یک متغیر از نوع داده کوچکتر بدون تبدیل صریح اختصاص دهید.

کامپایلر جاوا تبدیل نوع ضمنی را هنگام تخصیص مقادیر بین انواع سازگار انجام می‌دهد، اما اجازه نمی‌دهد که تبدیل از نوع داده بزرگتر به نوع داده کوچکتر بدون تبدیل نوع صریح انجام شود.

مثال

در مثال زیر، نشان داده‌ایم که می‌توانیم یک خطا دریافت کنیم زمانی که کامپایلر سعی می‌کند یک نوع داده بزرگتر را به یک نوع داده کوچکتر تبدیل کند. در اینجا، متغیر num1 از نوع صحیح و num2 از نوع اعشاری است. مجموع num1 و num2 از نوع double خواهد بود و زمانی که سعی می‌کنیم آن را در مجموع از نوع int ذخیره کنیم، کامپایلر خطا می‌دهد.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
package com.tutorialspoint;
public class Tester {
// Main driver method
public static void main(String[] args) {
// Define int variables
int num1 = 5004;
double num2 = 2.5;
int sum = num1 + num2;
// show output
System.out.println("The sum of " + num1 + " and " + num2 + " is " + sum);
}
}
package com.tutorialspoint; public class Tester { // Main driver method public static void main(String[] args) { // Define int variables int num1 = 5004; double num2 = 2.5; int sum = num1 + num2; // show output System.out.println("The sum of " + num1 + " and " + num2 + " is " + sum); } }
package com.tutorialspoint;

public class Tester {
   // Main driver method
   public static void main(String[] args) {
      // Define int variables
      int num1 = 5004;
      double num2 = 2.5;
      int sum = num1 + num2;
      // show output
      System.out.println("The sum of " + num1 + " and " + num2 + " is " + sum);
   }
}

کد را کامپایل و اجرا کنید. این کار نتیجه زیر را تولید می‌کند:

خروجی

استثنا در رشته “main” java.lang.Error: مشکل کامپایل حل نشده: ناسازگاری نوع: نمی‌توان از double به int تبدیل کرد

در com.tutorialspoint.Tester.main(Tester.java:9)

تبدیل نوع محدود (Narrowing Type Casting)

تبدیل نوع محدود که به آن تبدیل نوع صریح (Explicit Type Casting) یا تبدیل نوع صریح داده (Explicit Type Conversion) نیز گفته می‌شود، توسط برنامه‌نویس به‌صورت دستی انجام می‌شود. در تبدیل نوع محدود، یک نوع داده بزرگتر می‌تواند به یک نوع داده کوچکتر تبدیل شود.

وقتی که یک برنامه‌نویس نوع متغیر را هنگام نوشتن کد تغییر می‌دهد، می‌توانیم از عملگر تبدیل نوع (cast operator) برای تغییر نوع متغیر استفاده کنیم. برای مثال، تبدیل double به int یا int به double.

نحو

در زیر نحو تبدیل نوع محدود (تبدیل دستی نوع داده) آمده است:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
double doubleNum = (double) num;
double doubleNum = (double) num;
double doubleNum = (double) num;

عبارت کد بالا متغیر را به نوع double تبدیل خواهد کرد.

مثال

در مثال زیر، متغیر num از نوع صحیح تعریف شده و با مقدار اولیه‌ای مقداردهی می‌شود. همچنین، متغیر doubleNum از نوع double تعریف شده و مقدار متغیر num پس از تبدیل به double در آن ذخیره می‌شود.

سپس، متغیر convertedInt از نوع صحیح (int) ایجاد کرده‌ایم و مقدار double را پس از تبدیل نوع به int در آن ذخیره کرده‌ایم. در خروجی، می‌توانیم مقدار متغیرهای double و int را مشاهده کنیم.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
package com.tutorialspoint;
public class Tester {
// Main driver method
public static void main(String[] args) {
// Define int variable
int num = 5004;
// Type casting int to double
double doubleNum = (double) num;
// show output
System.out.println("The value of " + num + " after converting to the double is " + doubleNum);
// Type casting double to int
int convertedInt = (int) doubleNum;
// show output
System.out.println("The value of " + doubleNum + " after converting to the int again is " + convertedInt);
}
}
package com.tutorialspoint; public class Tester { // Main driver method public static void main(String[] args) { // Define int variable int num = 5004; // Type casting int to double double doubleNum = (double) num; // show output System.out.println("The value of " + num + " after converting to the double is " + doubleNum); // Type casting double to int int convertedInt = (int) doubleNum; // show output System.out.println("The value of " + doubleNum + " after converting to the int again is " + convertedInt); } }
package com.tutorialspoint;

public class Tester {
   // Main driver method
   public static void main(String[] args) {
      // Define int variable
      int num = 5004;
      // Type casting int to double
      double doubleNum = (double) num;
      // show output
      System.out.println("The value of " + num + " after converting to the double is " + doubleNum);
      // Type casting double to int
      int convertedInt = (int) doubleNum;
      // show output
      System.out.println("The value of " + doubleNum + " after converting to the int again is " + convertedInt);
   }
}

کد را کامپایل و اجرا کنید. این کار نتیجه زیر را تولید می‌کند:

خروجی

مقدار 5004 پس از تبدیل به double برابر با 5004.0 است مقدار 5004.0 پس از تبدیل مجدد به int برابر با 5004 است

PHP از دستورات echo و print برای نمایش خروجی در مرورگر یا کنسول PHP استفاده می‌کند. هر دو ساختارهای زبان...
شناسه‌ها در ++C نام‌های منحصربه‌فردی هستند که برای شناسایی متغیرها، توابع، کلاس‌ها، آرایه‌ها و سایر آیتم‌های تعریف‌شده توسط کاربر در...
++C
کلمات کلیدی در C++ کلمات رزرو شده‌ای هستند که برای کامپایلر معنا و مفهوم خاصی دارند. این کلمات نمی‌توانند برای...
++C
ثابت‌ها به مقادیر ثابتی اشاره دارند که برنامه نباید آن‌ها را تغییر دهد و به آن‌ها لیترال (Literal) گفته می‌شود. ثابت‌ها می‌توانند...
C++ Programming Language
توکن‌های C++ کوچک‌ترین واحدهای مستقل در یک برنامه هستند که توسط کامپایلر شناسایی و پردازش می‌شوند. این توکن‌ها با هم...
C++ Programming Language
حذف فضای نام (Namespace) شما می‌توانید به‌صورت صریح از پیشوند std:: برای اشیاء و توابع کتابخانه استاندارد استفاده کنید، به‌جای اینکه از...
C++ Programming Language
1

پشتیبانی واتساپ هوش فعال