首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内部/外部类SCJP

内部/外部类SCJP
EN

Stack Overflow用户
提问于 2014-03-11 10:38:54
回答 2查看 1K关注 0票数 0

哪三个代码片段,分别添加到第26行,产生输出100?(选择三项。)

代码语言:javascript
复制
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

代码语言:javascript
复制
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时会发生什么。

您的回复非常受欢迎

提前感谢

EN

回答 2

Stack Overflow用户

发布于 2014-03-11 10:48:52

唯一具有getX方法的对象是InnerOuterInner公开了一个设置器,允许您设置所需的引用。传入的引用有一个值为100setX调用,这就是它工作的原因。

为了用一些ASCII艺术来说明它...

代码语言:javascript
复制
Outer     Inner      int
+---+     +---+     +---+
| o | --- | y | --- | x |
+---+     +---+     +---+

实例化Inner.

  • You的引用将100.

的Int值的实例设置为100。

  • Inner的引用放在Outer的内部。Inner的Int值仍为100。

  • 然后调用检索code的值的o.getY().getX()
票数 0
EN

Stack Overflow用户

发布于 2014-09-04 21:05:39

在“第25行”的代码中,变量i和y引用相同的内存地址,所以如果您选择选项D,您将创建一个新对象,而i将指向新的内存地址,对i所做的任何更改都将独立于创建的第一个内部对象,并且变量y仍在指向

:D

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22315391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档