public static void main(String arg[]) {
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最后的语句y=x为什么没有使b的值改变
而x.append(y)却改变了呢
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最后的语句y=x为什么没有使b的值改变
而x.append(y)却改变了呢
解决方案 »
- 项目怎么部署到服务器上!让所有人都能访问
- web下 怎么显示tif格式的图片?
- 谁有在java表格中显示图片的代码
- 一个用Java读写Excel文件的例子
- JFileChooser中的c: d: e: 等盘符是通过什么显示出来的,是怎么得到机器的所有盘符呀?
- 连db2的url怎么写哦....
- 关于ANT的命令行执行
- 如何在文件特定位置插入数据?
- 在什么地方能下载JDBC。多谢了。
- 请教大虾们,如何用 java 实现树型数据结构?
- 求Linux下的MyEclipse
- A a = new A(); a.method(); 和 IA a = new A(); a.method();两者在jvm里运行时有何区别
可以参考《java核心》
而StringBuffer是比较特殊的一个类
我觉得你可以去好好看一下String和StirngBuffer的区别
你就明白了
里面分析了内存的变化情况...
a 和 x 都只是指向了同一块内存,
b 和 y 也都指向同一块内存.
方法中x.append(y)修改了改a 和 x 都指向的内存("A")...
后来 y = x 这句只是让 y 和 a 和 x 都指向一块内存("A")...
现在只有b指向内存"B"...
这个知识点在 < <疯狂java讲义>>中讲得非常清楚...
里面分析了内存的变化情况...
a 和 x 都只是指向了同一块内存,
b 和 y 也都指向同一块内存.
方法中x.append(y)修改了改a 和 x 都指向的内存("A"),变成了"AB"...
后来 y = x 这句只是让 y 和 a 和 x 都指向一块内存("AB")...
现在只有b指向内存"B"...
传递给它的任何参数变量的内容。
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) {
System.out.println("y1"+y);
x.append(y);
y = x;
System.out.println("y2"+y);
}
b的地址确实没有变
y的值是改变了的 但b并没有指向y
StringBuffer是对象类型,传的是引用。并且是原来引用的副本。也就是说x,y只是和a,b指向同样对象的另外2个引用。
x.append(y); 的时候直接修改了引用指向的对象,所以吧原引用打印出来也是修改了的。
y = x; 的时候,只是让y指向别的对象,原来的引用b并不受影响。所以不会改变。