当前位置:  技术问答>java相关

关于参数传递的一道SCJP题?疑惑

    来源: 互联网  发布时间:2015-03-02

    本文导语:  请看下面的程序: class ValHold {   public int i = 10; } class SL275 {   public static void main(String argv[])   {     SL275 o = new SL275();     o.amethod();   }   public void amethod()   {     int i = 99;     ValHold v = new...

请看下面的程序:
class ValHold
{
  public int i = 10;
}
class SL275
{
  public static void main(String argv[])
  {
    SL275 o = new SL275();
    o.amethod();
  }
  public void amethod()
  {
    int i = 99;
    ValHold v = new ValHold();
    v.i=30;
    another(v,i);
    System.out.println(v.i);//关键问题在这句话
  }
  public void another(ValHold v, int i)
  {
    i=0;
    v.i = 20;
    ValHold vh = new ValHold();
    v =  vh;
    System.out.println(v.i+ " "+i);
  }
}
我自己写出的结果是10 0 10
而正确答案是10 0 20

Java参数传递我是知道的,当参数为变量时传递值,为对象时传递地址。可是这道题关键在有注释的地方。我觉得对象v已经在another()里被指向了对象vh的首地址,那么再访问v.i的时候应该是10了啊。你们看看,为什么会是20啊?

|
首先,在another方法中,
有一句v.i=20;这句修改的是v实例所指的内存空间中的i的内容,
后一句v=vh,把v指向vh的内存地址,
所以,System.out.println(v.i+""+i);是10 0,
但是,由于v是对象,所以,当除了这个方法以后,
它所指的内存地址是不变的,
还是没有进方法前的地址,
所以v.i是20;
对象本身不能变,
但是对象所指的内容可以改变。

|
class SL275
{
  public static void main(String argv[])
  {
    SL275 o = new SL275();
    o.amethod();
  }
  public void amethod()
  {
    int i = 99;
    ValHold v = new ValHold();
    v.i=30; //change the variable(i) value to 30
    another(v,i); //this statement set v.i to 20
    System.out.println(v.i);//关键问题在这句话
  }
  public void another(ValHold v, int i)
  {
    i=0;
    v.i = 20; //change variable value to 20. It's in the origin instance created in amethod.
    ValHold vh = new ValHold(); //create a new instance, differ from the one created in amethod()
    v =  vh; //point to a new instance, it's different from the origin one now.
    System.out.println(v.i+ " "+i); //print10 0
  }
}

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • url能传递参数吗?怎样才能传递参数(比如查询结果)
  • 在页面间传递参数时,接受参数的页面如何读取参数值啊??在线等待……
  • 我想在?好后面传递参数,参数中包含汉字时。就出现乱码。我该怎么办?
  • Jquery easyui之控件参数传递方法
  • gtk 回调函数的参数传递问题!
  • 在线求救!!!如果在JSP页面之间传递多个参数?
  • 关于Makefile传递参数
  • 有关往脚本中传递参数的问题?
  • probe函数参数传递过程?
  • Qt中利用槽如何来传递参数
  • java中如何使参数传递按传"引用"方式进行?
  • probe函数参数传递过程? iis7站长之家
  • JSP页面中文传递参数使用escape编码
  • url传递特殊参数的问题!
  • 高分求救!JSP的参数传递问题?
  • GET方法URL中传递中文参数乱码的解决方法
  • 多线程参数传递
  • 参数传递问题!
  • 在框架结构的网页中,子框架中的表单无法传递参数,怎么办??
  • response.sendRedirct() 的中文参数传递问题
  • Python函数默认参数和字典参数及可变参数(带星号参数)
  • applet传参数到serlvet,后,如果参数后面有空格,则后面的参数。。。
  • ndk下编译ffmpeg的configure命令及配置参数
  • 做网页有时会用到"HTTP_USER_AGENT"或"REMOTE_ADDR"这样的参数,这到底是一个什么参数,如何得知这一类参数的全部信息?谢谢
  • Linux下curl的下载,安装以及curl命令的详细参数,用法介绍
  • c# 可选参数、命名参数
  • c++模板(Template)介绍及模板参数中包含模版
  • 有谁知道命令后加-的参数和不加-的参数有什么不同?
  • C++可变参数模板(variadic template)详细介绍及代码举例
  • 如何实现linux下ant调用sh(带输入参数),参数自动填入并执行sh
  • ​Docker 1.12.0 改进了服务的负载均衡参数


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,