سلام✋
همونطور که از عنوان مشخصه میخوایم در مورد انواع Casting در جاوا صحبت کنیم و نکاتی رو در موردشون ببینیم.
ما 2 نوع Casting در جاوا داریم یکی صریح (Explicit) و دیگری ضمنی (Implicit)
در نوع صریح همونطور که از اسمش پیداست به صورت صریح اعلام میکنیم که میخوایم از یک نوع داده با دامنه بالاتر به یک نوع داده با دامنه پایین تر حرکت کنیم و با علامت () اون رو مینویسیم.
Double -> FLoat -> Long -> Int -> Char -> Short -> Byte
public static void main(String[] args) { double myDouble = 9.78d; int myInt = (int) myDouble; // Manual casting: double to int System.out.println(myDouble); // Outputs 9.78 System.out.println(myInt); // Outputs 9 }
همونطور که در بالا میبینید، یک متغیر از نوع double تعریف شده و ما صراحتا گفتیم که میخوایم به int تبدیلش کنیم.
و اما نوع ضمنی چیه؟
در Casting ضمنی میتونیم بگیم برعکس نوع صریح عمل میکنیم و از یک نوع داده با دامنه پایین تر به یک نوع داده با دامنه بالاتر تر حرکت کنیم.
Byte -> Short -> Char -> Int -> Long -> Float -> Double
public static void main(String[] args) { int myInt = 9; double myDouble = myInt; // Automatic casting: int to double System.out.println(myInt); // Outputs 9 System.out.println(myDouble); // Outputs 9.0 }
همونطور که در بالا میبینید این کار به صورت خودکار انجام و در نتیجه یک int به double تبدیل شده.
public static void main(String args[]){ //Converting int primitive into Integer object int num=100; Integer obj=Integer.valueOf(num); System.out.println(num+ " "+ obj); }
Output: 100 100
همونطور که می بینید هر دو نوع داده primitive و Wrapper object دارای مقادیر یکسانی هستن.
حالا برعکس این قضیه هم ممکنه پیش بیاد که بخوایم نهایتا به یک داده primitive برسیم. اون وقت چیکار میکنیم؟ دوتا راه وجود داره یکی اینکه به صورت خیلی ساده بیایم Explicit casting انجام بدیم یا اینکه از بعضی متدها استفاده کنیم.
به عنوان مثال اگر مطمئن هستیم که شی مورد نظر یک عدد صحیح است، به این صورت عمل میکنیم.
int x = (Integer)yourObject;
راه بعدی استفاده از برخی متدهاست. در جاوا Integer، Long، BigInteger و ... همگی از کلاسNumber ارثبری می کنن که متدی به نام ()intValue داره.
public static void main(String args[]){ //Creating Wrapper class object Integer obj = new Integer(100); //Converting the wrapper object to primitive int num = obj.intValue(); System.out.println(num+ " "+ obj); }
Output: 100 100
البته از متد ()parseInt هم میشه استفاده کرد، در صورتی که ورودی رو به صورت رشته بهش پاس بدیم.
/** * Parses the specified string as a signed decimal integer value. The ASCII * character \u002d ('-') is recognized as the minus sign. * * @param string * the string representation of an integer value. * @return the primitive integer value represented by {@code string}. * @throws NumberFormatException * if {@code string} cannot be parsed as an integer value. */ public static int parseInt(String string) throws NumberFormatException { return parseInt(string, 10); }
خب امیدوارم این مطالب براتون مفید بوده باشه. اگر نکته ای، سوالی یا پیشنهادی بود، حتما کامنت بذارید و نظرتون رو برام بنویسید. فعلا بدرود ?