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(b);
}
static void operate(StringBuffer x,StringBuffer y)
{
x.append(y);
y=x;
}}
为什么结果只输出一个b 而不是ab??
public static void main(String[] args)
{
StringBuffer a=new StringBuffer("a");
StringBuffer b=new StringBuffer("b");
operate(a, b);
System.out.println(b);
}
static void operate(StringBuffer x,StringBuffer y)
{
x.append(y);
y=x;
}}
为什么结果只输出一个b 而不是ab??
解决方案 »
- Eclipse中main和System.out.println()的快捷输入?
- 如何判断ChoiceGroup选中那个项?
- 怪问题啊!怎么修改web.xml文件的路径
- 为何两个相同的String,比较结果却是False??
- 如何得到某年某个月的天数?eg:2003年2月,参数为2003和2
- 看了几本书,编了个程序,结果怎么弄也不行。
- 偶在JBUILDER里写第一个JAVA程序中遇到的报错
- 关于时间。如何根据一个日期来算出这个日期是星期几呢?
- 怎样把对象写到SQL Server数据库中(各位大侠帮忙)
- 为什么我在调用destroy方法出现nosuchmethoderror
- GUI问题 ,请求帮助
- K-Means算法的java实现
public static void main(String[] args) {
StringBuffer a = new StringBuffer("a");
StringBuffer b = new StringBuffer("b"); System.out.println(operate(a, b));
} static StringBuffer operate(StringBuffer x, StringBuffer y) {
x.append(y);
y = x;
return y;
}}
{
x.append(y);
y=x;
} 关键是这个方法,传进这个方法的是两个对象的引用,这个应该知道。
这个时候指向第一个对象的是变量a、x,指向第二个对象的是变量b、y。
然后在x上执行append,这是对对象的操作,所以字符串“b”加到了“a”的后面。
然后y=x,这个是变量的赋值,只是令y变量指向x变量所表示的对象,对主函数里的a、b变量没有影响。
x=y重赋值不可以
可以把这理解为传值。
形参是引用的拷贝只能操作对象,改变赋值不影响实参~
1:基本类型,传递这个基本类型的副本,不会改变被传递参数的值
2:对象类型,传递这个对象的值,因为java没有指针,所以仅仅可以改变参数的内部状态,不可以改变它的重新指向。
StringBuffer虽然是个对象,但其内部操作的是基本类型char,因此其作为参数传递时是不会改变值的。
希望能给你帮助!