在第26行单独添加的三个代码片段产生输出100? (选择三项。)
class Inner {
private int x;
public void setX(int x) {this.x = x;}
public int getX(){return x;}
}
class Outer{
private Inner y;
public void setY(Inner y) {this.y = y;}
public Inner getY(){return y;}
}
public class Gamma {
public static void main(String[] args){
Outer o = new Outer();
Inner i = new Inner();
int n = 10;
i.setX(n);
o.setY(i);
**// Line 26**
System.out.println(o.getY().getX());
}
}
这个问题来自SCJP
A.
n = 100;
B.
i.setX( 100 );
C.
o.getY().setX( 100 );
D.
i = new Inner(); i.setX( 100 );
E.
o.setY( i );
i = new Inner();
i.setX( 100 );
F.
i = new Inner();
i.setX( 100 );
o.setY( i );
答案是BCF
我理解B和C,但我不懂F. 如果我使用D选项为什么它给我10作为输出。我想知道当我使用选项D时发生了什么。
欢迎回复
提前致谢
答案 0 :(得分:0)
getX
方法的唯一对象是Inner
。 Outer
将setter公开给Inner
,允许您设置所需的引用。传入的引用包含值为setX
的{{1}}调用,因此可以使用它。
用一点ASCII艺术来说明......
100
Outer Inner int
+---+ +---+ +---+
| o | --- | y | --- | x |
+---+ +---+ +---+
。Inner
的int值实例设置为100。Inner
的引用放在Inner
内。 Outer
的int值仍为100。Inner
,检索o.getY().getX()
。答案 1 :(得分:0)
在"第25行和第34行的代码中;变量i和y指向相同的内存地址,所以如果你选择D,你将创建一个新对象,我将指向一个新的内存地址,对i进行任何更改都独立于创建的第一个内部对象以及哪个变量y仍指向
:d