2014-10-09 118 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

相关问题