黑马程序员技术交流社区

标题: java日常测试疑问 [打印本页]

作者: 河边捉虾米    时间: 2016-9-17 21:15
标题: java日常测试疑问
3.        下面程序的运行结果是什么(  A  )   
  public static void main(String[] args){
                String s1 = “abc”;
                String s2 = “xyz”;
  show(s1,s2);
System.out.println(s1+”-----”+s2);
}
static void show(String s1,String s2){   
         s1 = s2+s1+”Q”;
         s2 = “W”+s1;   
}
//因为没有返回,所以出了方法就失效了
a)        abc-----xyz
b)        xyzabcQ-----xyzWabc
c)        xyzabcQ---- xyzabcQWabc
d)        xyzQ----Wabc

个人认为这里的坑在于没有返回值,请大神们看看是这么样子的么?
作者: daikaisheng    时间: 2016-9-18 00:09
这是一道陷阱提,void不需要返回值,直接调用方法即可。
作者: jiubaK    时间: 2016-9-18 00:15
不是没有返回值的问题,是调用方法时参数传递问题.
作者: 河边捉虾米    时间: 2016-9-18 12:19
jiubaK 发表于 2016-9-18 00:15
不是没有返回值的问题,是调用方法时参数传递问题.

额,兄弟,你详细说说,我以为只是没有返回的问题,把你的理解说说呗
作者: jiubaK    时间: 2016-9-18 16:12
河边捉虾米 发表于 2016-9-18 12:19
额,兄弟,你详细说说,我以为只是没有返回的问题,把你的理解说说呗

要区分传递的是引用数据类型还是基本数据类型
基本数据类型作为参数传递时,你做任何更改都是不影响原数据的;
引用数据类型作为参数传递时,你所做的更改会影响到原数据(除了String,String比较特殊).
其实,引用数据类型之所以会有这个效果,是因为传递的是地址值,你在任何地方通过这个地址值去做修改,当然能够影响到原数据.而String之所以特殊,是因为String字符串一旦初始化后,就不能改变(不知道你能不能理解这句话,建议不理解的话,多画画内存图)
作者: 河边捉虾米    时间: 2016-9-18 21:22
jiubaK 发表于 2016-9-18 16:12
要区分传递的是引用数据类型还是基本数据类型
基本数据类型作为参数传递时,你做任何更改都是不影响原数据 ...

理解了,感谢你的点拨,顿悟了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2