哪三个代码片段,分别添加到第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时会发生什么。
您的回复非常受欢迎
提前感谢
发布于 2014-03-11 10:48:52
唯一具有getX方法的对象是Inner。Outer向Inner公开了一个设置器,允许您设置所需的引用。传入的引用有一个值为100的setX调用,这就是它工作的原因。
为了用一些ASCII艺术来说明它...
Outer Inner int
+---+ +---+ +---+
| o | --- | y | --- | x |
+---+ +---+ +---+实例化Inner.
100.的Int值的实例设置为100。
Inner的引用放在Outer的内部。Inner的Int值仍为100。
o.getY().getX()发布于 2014-09-04 21:05:39
在“第25行”的代码中,变量i和y引用相同的内存地址,所以如果您选择选项D,您将创建一个新对象,而i将指向新的内存地址,对i所做的任何更改都将独立于创建的第一个内部对象,并且变量y仍在指向
:D
https://stackoverflow.com/questions/22315391
复制相似问题