public class Foo { |
|
4分 |
y=x;
这一句没有任何意义,这只是改变了局部变量的指向,并没有修改哪一个对象,所以对外部无影响。 而且永远不要对局部变量进行赋值操作(如a = b),尽量不要修改局部变量的值(如a++),除非你200%地清楚你在干什么,并且这样做非常必要。 |
12分 |
public static void operator(StringBuffer x,StringBuffer y){ // x 的拷贝变为了AB,x 的拷贝和x 指向同一个内存地址,所以x 变为了AB x.append(y); // y 的拷贝指向了x 的拷贝的地址,也就是x 的地址,那么y 的拷贝将不再影响y 的指向 // 所以 y 的值依然为B y=x; } 记着一点就行了,java传递的是拷贝,在方法内改变了拷贝的指向,那么后面做的任何事情都不影响原值了 |
java中只有传值,后面的y=x 相当于y引用了x的位置 但没有改变值
|
|
4分 |
我是这样理解的:
public class Foo { public static void main(String[] args) { StringBuffer a=new StringBuffer(“A”); //开辟一块内存 id=21 StringBuffer b=new StringBuffer(“B”); //开辟一块内存 id=25 operator(a,b); System.out.println(a+”,”+b); //打印出来内容是 内存地址的存放内容 } //注意了。id21,id25两个StringBuffer传过来 public static void operator(StringBuffer x,StringBuffer y){ x.append(y); //这个操作,id21的值变成了‘AB’ // y.append(x); 在y=x既是改变y的id之前,你试试 ,输出不一样哦 y=x; //这个操作,把y的id由id25变成id21,之后操作y也不会改变id25的值 // y.append(x); 在y=x既是改变y的id之后,你试试 ,输出不一样哦 } } 建议:多理解基础,这都是原理的东西 |
明白 了,就是传值 的时候只是原对象的一份拷贝,拷贝的指向并不会改变原对象的指向 |