public class Test {
public static Object xxxx(){
return 1l;
}
public static void main(String[] args) {
//int i= (int) xxxx();
// System.out.println(i);
}
}
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
方法名前面的是什么型別,回傳的就是什么型別。1l表示長整型資料。return的是個Long型,涉及到向上轉型。變成Object。Java的所有類都是Object類的子類。
包裝資料型別之間不能互相強制轉換。
你可以這樣:
Long i = (Long) xxxx();
System.out.println(i);
如果你確實要用int型別 那就這樣:
int i = Integer.parseInt(xxxx().toString());
System.out.println(i);
uj5u.com熱心網友回復:
既然return的是個Long型別,那為什么還要寫Long i=(Long)xxxx()
uj5u.com熱心網友回復:
不用強轉long型別吧,不是自動拆箱嗎uj5u.com熱心網友回復:
需要的吧,xxxx()方法在回傳時自動把1l轉換成Object型別并回傳
你現在要把一個Object型別值賦給一個Long型,當然要強制轉換過來
另外實際上也可以用int i= (Integer)xxxx();
這樣的把Integer值賦給int變數才是自動拆箱吧
uj5u.com熱心網友回復:
運行時是Long,但編譯器不知道啊,他只知道你回傳的是Object型別的物件,所以為了編譯通過,你得強轉一次
uj5u.com熱心網友回復:
個人見解:雖然你return的是long型別,但是xxxx()的回傳值是Object,就會將long型別的這個值轉為Object,那你用基本資料型別int來強制轉換Object是不行的,只能用long的包裝類Long或者int的包裝類Integer來強轉。
uj5u.com熱心網友回復:
方法名前面的是什么型別,回傳的就是什么型別。
1l表示長整型資料。return的是個Long型,涉及到向上轉型。變成Object。Java的所有類都是Object類的子類。
包裝資料型別之間不能互相強制轉換。
你可以這樣:
Long i = (Long) xxxx();
System.out.println(i);
如果你確實要用int型別 那就這樣:
int i = Integer.parseInt(xxxx().toString());
System.out.println(i);
既然return的是個Long型別,那為什么還要寫Long i=(Long)xxxx()
兄弟,這是典型的具體到抽象,然后抽象再到具體。
回傳型別是Object,但實際回傳的是Long,相當于把Long抽象成了Object物件。這是一個向上轉型的程序。具體到抽象。
但你這里是要用具體的型別。所以需要發生向下轉型,抽象到具體。這樣寫是因為我們知道實際是Long型。如果你用別人的方法回傳值,不知道的情況下,就需要 if(物件 instanceof 型別) 這樣來判斷了。
當然,如果你直接這樣 Object i = xxxx();就不用轉。但是你要用到具體數值的時候,還是需要轉換。畢竟Object是抽象的。就像男人女人都是人類。一個方法回傳型別是人類,但是卻回傳了一個女人物件。這樣是沒錯的。但你要用方法的回傳值生孩子的時候,就必須轉成具體的女人物件。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/90428.html
標籤:Java SE
上一篇:SmartUpload上傳檔案,重命名后要保存在專案檔案upload下,WebRoot下有檔案夾upload,但是上傳后并未保存在里面,不過資料庫中卻有重命名后
