[英]Passing big objects references instead of small objects to methods have any differences in processing or memory consumption?
[英]Why casting direction is big to small in primitive types and small to big with objects?
在 Java 中,我們需要在將 double(memory 尺寸大)轉換為 Integer(ZCD691B4957F098CD281Z 尺寸較小)時進行轉換
int x = (int) 4.3;
但是在對象的情況下,如果父 class 是“哺乳動物”(在 memory 大小中小),其子類是“人類”(在 memory 大小中大),因為獲得了更多屬性然后哺乳動物
然后
Mammal m = new Human(); //works without casting
但從小到大的轉換
Human h = (Human) m ; // needs casting
提前致謝。
鑄造與 object 的大小無關:它與變量的范圍有關。
“范圍”是指變量可以包含的各種不同值。 如果您從一個變量分配給另一個變量,其范圍是第一個變量的超集,則不需要強制轉換,因為您知道分配是可以的。 但是,當您將一個變量分配給另一個其范圍是子集的變量時,您確實需要進行強制轉換,因為分配可能是不可能的。
想象一下,您有兩個容器:一個塑料桶和一個金屬絲購物籃,大小相同。 顯然,任何你可以放在鐵絲籃里的東西,你都可以放在浴缸里。 但並不是所有可以放在浴缸里的東西都可以放在籃子里。 一堆蘋果,你可以。 但是一堆葡萄干,你不能——它們會從籃子的洞里掉下來。 因此,浴缸可以容納的物品范圍大於籃子可以容納的物品范圍,即使兩者的尺寸相同。
在這個類比中,鑄造就像檢查你移動的東西是否適合新容器。 將東西從籃子移到浴缸時不需要檢查,但從浴缸移到籃子時需要檢查,否則水果會弄得滿地都是。
在您的具體情況下,我們知道每個人都是哺乳動物,但並非每個哺乳動物都是人,因此哺乳動物類型變量的范圍大於人類類型變量的范圍。 我們也知道 double 的范圍(大約 2^1024 - -(2^1024))大於 int 的范圍(2^31-1 - -2^31)。 因此,在任何一種情況下從前者分配給后者都需要強制轉換,但從后者分配給前者則不需要。
當您使用原始類型時,您必須在有可能丟失信息時顯式地強制轉換。 例如, long
是 64 位, int
是 32。在int
中轉換long
會導致數據丟失(在這種情況下是 32 位)。
在處理對象時,這與多態性有關。 編譯器能夠確保每個Human
都是Mammal
。 這里沒問題。 但無法保證每一個Mammal
都是Human
。 您必須顯式轉換才能轉換引用類型。
您可以將顯式轉換視為對編譯器說“我知道您無法確保此數據轉換是安全的,但我知道我在做什么”的一種方式。
在 object 的情況下,沒有 memory 的情況。只是多態性起作用。所以你可以將子類 object 變成超類型。
希望你能得到它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.