2014-11-14 55 views
4

我可以隱式地把int轉化爲long和long到long。爲什麼不可能將int隱式轉換爲Long?爲什麼Java不能在示例的最後一行執行隱式轉換?爲什麼從int到Long的隱式轉換不可能?

int i = 10; //OK 
long primitiveLong = i; //OK 
Long boxedLong = primitiveLong; //OK 
boxedLong = i; //Type mismatch: cannot convert from int to Long 
+0

這是因爲汽車拳擊已經從它的'Object'其基本類型1對1的關係。 – 2014-11-14 14:37:27

+0

可能沒有真正的原因,只是語言設計者決定不支持。你可以使用'boxedLong =(long)i'工作。 – jtahlborn 2014-11-14 14:43:11

回答

6

LongInteger是對象。拳擊/拆箱只適用於基元。 做Long boxedLong = i就像Long boxedLong = new Integer(10),這是一個不! 另外,請記住,在LongInteger之間沒有繼承關係,所以即使Integer i = new Long()無效

+0

Long和Integer是正確的類嗎?不是對象。 – 2014-12-17 13:08:13

0

拳擊僅適用於基元。這就是爲什麼。

試試這個:Long.valueOf(int);

Documentation

1

我在這方面長時間與龍之間看到的最大的區別是,龍可以爲空。如果有可能你可能缺少值,那麼Long對象會有幫助,因爲null可以指示缺失值。如果你使用的是基元,你將不得不使用一些特殊的值來表示缺失,這可能會是一團糟。速度或大小不可能是一個問題,除非你計劃製作一百萬個這樣的東西,然後序列化。 (When to use Long vs long in java?

事實上,沒有實際的原因。除了int是原始的,long是原始的,但Long不是。

我建議你使用Long.valueOf()

所以這樣的:

Long longValue = Long.valueOf(InsertIntHere); 
相關問題