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

真题一条,请高手帮忙!

    来源: 互联网  发布时间:2015-06-12

    本文导语:  public class Foo { public static void main(String args[]) { StringBuffer a=new StringBuffer("A"); StringBuffer b=new StringBuffer("B"); operate(a,b); System.out.println(a+","+b); } static void operate(StringBuffer x,StringBuffer y) { x.append(y...

public class Foo {

public static void main(String args[])
{
StringBuffer a=new StringBuffer("A");
StringBuffer b=new StringBuffer("B");
operate(a,b);
System.out.println(a+","+b);
}
static void operate(StringBuffer x,StringBuffer y)
{
x.append(y);
y=x;
}
}
为什么打印出来的是AB,B而不是AB,AB??

|
x、y分别“指向”了对象a和b,所以x.append(y)和a.append(b)的效果一样,但是y=x只是改变了y,却不等于就改变了b,所以打印值是AB,B。

|
我终于看出来了。
你看 operate是函数,它里面的变量是局部变量。
而相对来讲,在main中
StringBuffer a=new StringBuffer("A");
StringBuffer b=new StringBuffer("B");
相当于是全局变量。
你现在在局部变量中对变量进行改变,到了main中,又将使用全局变量。
所以,出现了这样。

正如前面有位兄台已讲的,这类似于传值,(不同于传址)。
你可能会问whyx的值却变了,这是因为append可能里面用了传址的方法。我也没研究过。大体是这样,如果你学过c or c++ 什么的你肯定会知道的。
(我可没鼓励你去学c or c++ )

慢慢来,一定能行的。



public class Foo {

public static void main(String args[])
{
StringBuffer a=new StringBuffer("A");
StringBuffer b=new StringBuffer("B");
operate(a,b);
System.out.println(a+","+b);
}
static void operate(StringBuffer x,StringBuffer y)
{
x.append(y);
y=x;
}
}

    
 
 

您可能感兴趣的文章:

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












  • 相关文章推荐
  • 请问哪里能找到JAVA认证考试的模拟题或真题?
  • 本人11月考scjp1.4哪位能给分真题(本人已有104 147)多谢
  • scjp 真题一个??,?,
  • scjp 真题一个??,?
  • 看这道真题的答案是什么?
  • scjp真题的问题!
  • scjp 真题一个???
  • 今天以96通过SCJP考试(含考试经验和部分真题)


  • 站内导航:


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

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3