2014-10-09 126 views
1

假設這一點,如果條件:是否創建了一個實例?

(ObjectA) request.getParameter("something") != null 

意志ObjectA匿名情況下產生的呢?

+0

http://stackoverflow.com/questions/9066218/casting-an-object-of-a-superclass-into-an-object-of-a-subclass-creates-a-new-obj – assylias 2014-10-09 08:21:08

+0

這是'請求''HttpServletRequest'? – 2014-10-09 08:23:19

回答

0

in request如果它不爲空,則已經有一個ObjectA的實例。所以沒有新的實例會被證明。

+0

你的意思是說,通過上述語句,我們只是訪問請求範圍中存在的對象。 如果我在條件之前追加'Object b ='? – 2014-10-09 08:32:49

+0

將會創建對該對象的現有實例的引用 – jBeenenga 2014-10-09 08:35:03

+0

我很想知道這對GC過程的影響嗎?在GC上會像增加或減少或沒有效果一樣? 參考GC完成的工作。 – 2014-10-09 08:40:28

0

不,不創建實例。即使該方法返回一些對象,它只是將參考文件轉換爲ObjectA。該實例將由request.getParameter()創建。

精化,鑄造不會創建新的實例。這只是參考分配。以下示例顯示計數。只有一個實例被創建。希望這可以幫助。

class Parent1 { static int j; Parent1(){j++;} } 
class Child extends Parent1{ static int i; Child(){i++;}} 

// and the code 
Parent1 pc = new Child(); 
System.out.println(Child.i); 
System.out.println(Parent1.j); 
Child p = (Child) pc; 
System.out.println(Child.i); 
System.out.println(Parent1.j); 

輸出

1 
1 
1 
1 
+0

我不認爲由'request.getParameter(「something」)''返回的對象引用正在播放,'(ObjectA)request.getParameter(「something」)!= null'就像是寫'(ObjectA)true'或' (ObjectA)false'。它應該是'if(request.getParameter(「something」)!= null){ObjectA Obj1 =(ObjectA)request.getParameter(「something」)}' – 2014-10-09 08:32:21

0

爲什麼會的ObjectA一個實例被創建,(ObjectA)會簡單地嘗試從request.getParameter("something") != null投返回值的類型ObjectA

0
request.getParameter("something") 

返回一個Object,你只是將它轉換爲ObjectA來檢查它的類型。沒有創建實例/對象。

來到的代碼的實際行,你不必強制轉換那裏只是

request.getParameter("something") != null 

就足夠了。

+0

我知道這就是爲什麼我明確地類型轉換爲'對象A '。 – 2014-10-09 08:35:20

相關問題