ورود

View Full Version : فرق Cast کردن با Convert در چیه؟



Sina.iRoid
دوشنبه 10 فروردین 1394, 12:00 عصر
سلام
می خواستم بدونم فرق Cast کردن با Convert کردن دی چیه؟
مثال از کانورت:
String.valueOF()
ممنون.

ahmad.mo74
دوشنبه 10 فروردین 1394, 14:24 عصر
سلام

وقتی چیزی رو cast میکنی در واقع به کامپایلر میگی که مثلا X رو به عنوان Y تلقی کن.
اما در مورد convert داری چیزی رو به چیز دیگه ای تبدیل میکنی.
در واقع تو بعضی موارد موقع cast کردن conversion صورت میگیره.

به نظرت میشه یه int رو به عنوان String تلقی کرد؟
مسلما نه، پس اینجا باید به نحوی conversion صورت بگیره. یعنی همون کاری که String.valueOf انجام میده و هر چیزی رو که بهش بدی مثل int و long و ... یا هر آبجکتی رو به String تبدیل میکنه.
مثلا در مورد int تک تک ارقامش رو به char تبدیل میکنه و در نهایت به String.

یا اینکه میشه int رو به عنوان long تلقی کرد؟
بله، چون هر دو primitive type هستند و میشه به هم cast شون کرد.

یا مثلا در مورد آبجکت ها، میشه آبجکت فرزند رو به پدر cast کرد. برعکسش نمیشه مگر اینکه ماهیتش از نوع فرزند باشه یعنی :


public class Test {


static class A {
}


static class B extends A {
}


public static void main(String[] args) {
A a = new B();
B b = (B) a; // ok
B b1 = (B) new A(); // error : ClassCastException
}


}


مثال از convert :


public class Test {


static class A {


public A(int i) {
this.i = i;
}


int i;


}


static class B {


public B(A a) {
this.i = a.i;
}


int i;


}


public static void main(String[] args) {
A a = new A(2);
B b = new B(a);
System.out.println(b.i);
}


}


در کل دو نوع cast داریم : implicit cast و explicit cast

مثال :


short s = 123;
double d = s; // implicit cast
s = (short) d; // explicit cast


در مورد cast همیشه باید حواست به اینکه چی رو به چی داری cast میکنی باشه، چون همیشه با اخطار کامپایلر مواجه نمیشی و خودت باید حواست باشه، مثل این :


Object o = 1234;
String s = (String) o; // error : ClassCastException
System.out.println(s);


نکته آخر اینکه مثلا وقتی int رو به long میخوای cast کنی چون int ماهیتش long نیست، اینجا conversion صورت میگیره، اما مثلا :


Object o = "string";
String s = (String) o;


دیگه اینجا conversion انجام نمیشه چون o ماهیتش String هست.