A obj = new A(new B); 是什么意思?

时间:2021-02-17 18:56:10

标签: java object oop

方法一

AppMain.java

A obja = new A(new B());

RandomClass.java

B b; 
pubic A(B b){
this.b = b;
}

方法 2

AppMain.java

B objb = new B();
A obja = new A(objb);

RandomClass.java

//same code 

方法 1 和方法 2 相同吗?

2 个答案:

答案 0 :(得分:1)

除了一个细微的区别之外,这两种方法是相同的(除了在第一种方法中您需要 SELECT -- DISTINCT ON (p.id) 'plan_progress' AS EVENT_TYPE , '-1' AS EVENT_VALUE , extract(EPOCH FROM p.created_at) AS CREATION_TIMESTAMP FROM plans p WHERE p.status = 'ENDED' AND p.continuous IS NOT TRUE AND EXISTS( select * FROM schedules s WHERE s.plan_id = p.id AND s.status = 'DONE' ) ; 而不是 new A(new B()))。不同之处在于,在第二种方法中,您最终会得到对提供给 new A(new B) 构造函数的 objb 对象的单独引用(变量 B)。

答案 1 :(得分:0)

src/Memoizer.ts:11:31 - error TS2304: Cannot find name 'WeakRef'. 11 MemoCache.map.set(id, new WeakRef(o)); ~~~~~~~ src/Memoizer.ts:15:32 - error TS2304: Cannot find name 'WeakRef'. 15 static map = new Map<string, WeakRef>(); ~~~~~~~ 是编译器错误。因此,方法 1 失败了,方法 2 不会——它们不一样。

如果您打算将其设为 new B,但您在发布问题时有点粗心 - 那么这些是完全相同的。 new B() 表示:创建一个新的 B 对象,然后这个表达式的计算结果是一个指向这个新创建的对象的引用。然后使用 new B() 将此引用的副本传递给 A 构造函数。使用 new A(new B()),您可以将此引用的副本分配给局部变量,然后调用 A 构造函数,将此引用的副本传递给它。

换句话说,这归结为完全相同的事情。