public class Test60
{
public static void method(StringBuilder x,StringBuilder y)
{
x=y;
x.append(y);
}
public static void main(String[] args)
{
StringBuilder a=new StringBuilder("A");
StringBuilder b=new StringBuilder("B");
method(a,b);
System.out.println(a+","+b);
}
}
解决方案 »
- 怎样实现倒计时开始/暂停/结束功能
- 新手求助 File(File parent, String child)和separator分隔符的使用
- Java 多线程TCP服务器,监听线程如何结束?
- 关于java基础的题目
- 如何让输入到TextField里的数据为星号!!!!!!!!!!!!!!!!
- 对Java有好多困惑,哪里有好的Java群,大家推荐几个。。。
- java.swing的应用问题
- applet能不能产生Get和Post请求?
- 请问Applet可否再没有按装JDK的电脑上正常显示。没装JDK==没装Java虚拟机吗?
- sjcp(4)
- 用迭代器与组合模式对树进行遍历
- [JAVA新手求助]关于servlet 404错误,大家帮帮忙
{
x=y;
x.append(y);
}x=y其实是修改了x的引用值,是不会返回的。只有对这个引用指向的内容作出修改才会返回。
所以x=y以后,我们对 x.append(y); 就像当与对x当前的引用内容作出修改。
修改完毕后,在这个函数范围内:
x,y都指向同一内容。但超出这个函数范围,x引用恢复,y引用值内容发生变化。
结果是:A,BB
public static void method(StringBuilder x,StringBuilder y){
System.out.println(x+","+y);
x=y;
System.out.println(x+","+y);
x.append(y);
System.out.println(x+","+y);
}
public static void main(String[] args){
StringBuilder a=new StringBuilder("A");
StringBuilder b=new StringBuilder("B");
method(a,b);
System.out.println(a+","+b);
}
}
输出结果为:
A,B
B,B
BB,BB
A,BB由于StringBuilder是对象,变量所存的是地址,虽然是按值传递,但实质是地址。
x=y :是将y的地址赋值给x,即x现在所指的是y所指的内容,所做的一切将会直接影响到y所指的内容。
在method()中,x所指的内容并没有改变。
所以得到最终的结果:A,BB