当前位置: 技术问答>java相关
关于StringBuffer的问题
来源: 互联网 发布时间:2015-09-08
本文导语: 代码如下: 1. public class Foo { 2. public static void main (String [] args) { 3. StringBuffer a = new StringBuffer (“A”); 4. StringBuffer b = new StringBuffer (“B”); 5. operate (a,b); 6. system.out.prin...
代码如下:
1. public class Foo {
2. public static void main (String [] args) {
3. StringBuffer a = new StringBuffer (“A”);
4. StringBuffer b = new StringBuffer (“B”);
5. operate (a,b);
6. system.out.println(a + “,” +b);
7. }
8. static void operate (StringBuffer x, StringBuffer y) {
9. x.append (y);
10. y = x;
11. }
12. }
输出结果AB,B
请问为什么?
1. public class Foo {
2. public static void main (String [] args) {
3. StringBuffer a = new StringBuffer (“A”);
4. StringBuffer b = new StringBuffer (“B”);
5. operate (a,b);
6. system.out.println(a + “,” +b);
7. }
8. static void operate (StringBuffer x, StringBuffer y) {
9. x.append (y);
10. y = x;
11. }
12. }
输出结果AB,B
请问为什么?
|
你犯了原则性的错误。
java的参数是按值传递的。
在方法中你不可以改变b的地址。
所以在函数返回后b仍然等于B.
java的参数是按值传递的。
在方法中你不可以改变b的地址。
所以在函数返回后b仍然等于B.
|
注意:
在main中a,b代表的都是實例,也就是一個地址值
你可以調用這個實例的方法去改變他的屬性,但你不可能去改變這個實例
在內村中的地址
在main中a,b代表的都是實例,也就是一個地址值
你可以調用這個實例的方法去改變他的屬性,但你不可能去改變這個實例
在內村中的地址
|
static void operate (StringBuffer x, StringBuffer y) {
StringBuffer temp=new StringBuffer(x.toString());
x.append(y);
y.insert(0,temp);
}
这个函数体可以返回AB AB的
调用函数时候任何对y的赋值操作都只局限于地址的改变,而在返回时全部无效,但是对这个地址所指向的对象的操作都会保留下来
StringBuffer temp=new StringBuffer(x.toString());
x.append(y);
y.insert(0,temp);
}
这个函数体可以返回AB AB的
调用函数时候任何对y的赋值操作都只局限于地址的改变,而在返回时全部无效,但是对这个地址所指向的对象的操作都会保留下来