当前位置: 技术问答>java相关
为什么?难道b的分配的空间没变?
来源: 互联网 发布时间:2015-11-19
本文导语: 代码如下: import java.awt.*; public class test { 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...
代码如下:
import java.awt.*;
public class test
{
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;
}
}
请问为什么b的值最后不是AB而仍是B呢?y=x好象没起作用呀!
请老师给予解答!!
import java.awt.*;
public class test
{
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;
}
}
请问为什么b的值最后不是AB而仍是B呢?y=x好象没起作用呀!
请老师给予解答!!
|
y=x;
这句话有问题
只不过让y指向了了x指向的地方,
如果
System.out.println(y);应该就是AB
而b还是没有改变指向
这句话有问题
只不过让y指向了了x指向的地方,
如果
System.out.println(y);应该就是AB
而b还是没有改变指向
|
真的是这样吗?那就奇怪了,关注。
|
你可以做个测试
static void operate(StringBuffer x,StringBuffer y)
{
x.append(y);
y=x;
System.out.println(x+","+y);
}
得到的结果是
AB,AB
说明在这里y=x;是有效的
其实可以这么理解,y=x的有效范围在operate,而且改变的仅仅是y的指向,而真正改变变量内容的操作是append,你也可以用String来试试
static void operate(StringBuffer x,StringBuffer y)
{
x.append(y);
y=x;
System.out.println(x+","+y);
}
得到的结果是
AB,AB
说明在这里y=x;是有效的
其实可以这么理解,y=x的有效范围在operate,而且改变的仅仅是y的指向,而真正改变变量内容的操作是append,你也可以用String来试试