Public class Test{
Public static void main(String[] args ){
StringBuffer a=new StringBuffer("A");
StringBuffer b=new StringBuffer("B");
Oprate(a,b);
System.out.println(a+","+b);
}
Static void Oprate (StringBuffer x, StringBuffer y){
x.append(y);
y=x;
}
}
a) A,B
b) AB,B
c) A,AB
d) AB,AB
为什么答案是B。。
Public static void main(String[] args ){
StringBuffer a=new StringBuffer("A");
StringBuffer b=new StringBuffer("B");
Oprate(a,b);
System.out.println(a+","+b);
}
Static void Oprate (StringBuffer x, StringBuffer y){
x.append(y);
y=x;
}
}
a) A,B
b) AB,B
c) A,AB
d) AB,AB
为什么答案是B。。
解决方案 »
- 数据库连接怎么也不成功?
- 请教实例初始化
- 谁来帮我讲解一下这道题~~~谢谢
- 用socket client端 发给socket服务器,服务器检查终端的连线状态,怎么一直是离线状态?
- 匹配这个字符串的正则表达式怎么写?"用户1-ww-1-8#用户2-eeeee-1-9#……"其中……代表可能有一个或者多个!谢谢!
- 关于swing的部分重绘
- 日本人说中国人不可能今天内凑够800万人签名,大家加油!!!
- 浮点数转化成整数的方法
- eclipse有没有类似于jb得插件呢?高分求地址与使用方法!
- 我想把信誉值减到50分。。帮帮忙啦。。。
- javaIO流生成文件处理
- double.class与Double.class区别
y=x; 这个在局部方法内无效,所以操作之后,y仍是B
你这写的,直接复制都不能用。是这样的
首先呢
你有一个StringBuffer a 和 一个 StringBuffer b
然后他们被传进了方法operate
然后他们传进去的时候呢,传了一个引用
这是什么意思呢
就是说
假如 StringBuffer a 真实指向的地址是 50
StringBuffer b 真实指向的地址是 100
那么在传入的时候
方法中就是另外两个
StringBuffer x 和StringBuffer y分别指向了50 和 100
使用append的时候
实际的地址50后面的第一个StringBuffer被操作了,变成了"AB",也就是引用的对象已经改变了
而y=x的时候
只是y这个引用指向了x指向的50
在方法完成以后
a还是指向50
b还是指向100
因为这个 a b 跟 x y不是一样的东西,是四个不同的引用
说到这个就要补充一下
所有的对象变量名 都只是一个指向地址的引用标识,而不代表对象本身
所以a指向的50由于append操作改变了
但是b指向的100没有任何改变
y=x仅仅是让y指向了50而已
class Test{
public static void main(String[] args ){
StringBuffer a=new StringBuffer("A");
StringBuffer b=new StringBuffer("B");
Oprate(a,b);
System.out.println("方法完成之后AB"+a+","+b);
System.out.println("方法完成之后的AB指向的对象为"+a.hashCode()+","+b.hashCode());
}
static void Oprate (StringBuffer x, StringBuffer y){
x.append(y);
y=x;
System.out.println("方法完成之后XY"+x+","+y);
System.out.println("方法完成之后的XY指向的对象为"+x.hashCode()+","+y.hashCode());
}
}楼主你运行一下我这个玩意就明白了