通常我們遇到的強轉,最爲常見的是:
long a = 1L;
int b = (int) a;
這種基本類型的強轉會損失一定精度。
那麼非基本數據類型能否強轉嗎?
當然也可以,比如下面兩個類。
class User{
}
class BigUser extends User{
boolean big;
}
我們測試一番,使用main方法調用test方法:
void main(){
test(new BigUser());
}
void test(User user){
BigUser bu = (BigUser)user;
...
}
運行起來是不報錯的,
但是需要注意的是,我們看test方法裏,只有user對象本質上就是BigUser時,纔會強轉成功,否則會報ClassCastException
比如下面的例子,就會報錯:
void main(){
test(new User());
}
void test(User user){
BigUser bu = (BigUser)user;
...
}
有時候我在寫一些基礎構件時,會希望能夠這樣強轉,那樣的話就不用copy屬性等數據了..但目前java是不支持的.它會報錯.