内/外类SCJP

时间:2014-03-11 02:38:54

标签: java scjp

在第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时发生了什么。

欢迎回复

提前致谢

2 个答案:

答案 0 :(得分:0)

getX方法的唯一对象是InnerOuter将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