该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2011-03-07
msnvip 写道 forsecond 写道 /**
* @author 子弹哥 * */ public class TestRef { public static void main(String[] args) { Aa a1 = new Aa(1); Aa a2 = new Aa(2); append(a1, a2); System.out.println(a1.getA() + "," + a2.getA()); a2 = a1; System.out.println(a1.getA() + "," + a2.getA()); } public static void append(Aa a1, Aa a2) { a1.setA(a2.getA()); a2 = a1; } } class Aa { private int a; public Aa(int a) { this.a = a; } public int getA() { return a; } public void setA(int a) { this.a = a; } } 感觉还是有点问题,如果append方法中的b=a;操作只是改变了append方法的中b的指向,并没有改变main方法中b的指向。那么上面我改的这个例子,好像不是这么回事 看你的这句.这样改成a1为2了.输出应该是全2 a1.setA(a2.getA()); 我奇怪的就是在 public static void append(Aa a1, Aa a2) { a1.setA(a2.getA()); a2 = a1; } 这当中a1 a2跟第七里面的StringBuffer难道不是一样的吗》?传递过来的都是对象的引用地址啊。既然StringBuffer在方法里面只是把局部变量b的指向修改了,而main没变,那我改的这个方法里面,有什么不同吗? |
|
返回顶楼 | |
发表时间:2011-03-07
forsecond 写道 msnvip 写道 forsecond 写道 /**
* @author 子弹哥 * */ public class TestRef { public static void main(String[] args) { Aa a1 = new Aa(1); Aa a2 = new Aa(2); append(a1, a2); System.out.println(a1.getA() + "," + a2.getA()); a2 = a1; System.out.println(a1.getA() + "," + a2.getA()); } public static void append(Aa a1, Aa a2) { a1.setA(a2.getA()); a2 = a1; } } class Aa { private int a; public Aa(int a) { this.a = a; } public int getA() { return a; } public void setA(int a) { this.a = a; } } 感觉还是有点问题,如果append方法中的b=a;操作只是改变了append方法的中b的指向,并没有改变main方法中b的指向。那么上面我改的这个例子,好像不是这么回事 看你的这句.这样改成a1为2了.输出应该是全2 a1.setA(a2.getA()); 我奇怪的就是在 public static void append(Aa a1, Aa a2) { a1.setA(a2.getA()); a2 = a1; } 这当中a1 a2跟第七里面的StringBuffer难道不是一样的吗》?传递过来的都是对象的引用地址啊。既然StringBuffer在方法里面只是把局部变量b的指向修改了,而main没变,那我改的这个方法里面,有什么不同吗? ..和lz的题一样的好不。 public static void append(Aa a1, Aa a2) { a1.setA(a2.getA()); a2 = a1; } 这个方法 a1里a的值被改了,a2里a的值没改。。 主要你这样做有点区分不开 值都改成2了。。 a2 = a1;这句其实只是改变的副本。 |
|
返回顶楼 | |
发表时间:2011-03-07
forsecond 写道 msnvip 写道 forsecond 写道 /**
* @author 子弹哥 * */ public class TestRef { public static void main(String[] args) { Aa a1 = new Aa(1); Aa a2 = new Aa(2); append(a1, a2); System.out.println(a1.getA() + "," + a2.getA()); a2 = a1; System.out.println(a1.getA() + "," + a2.getA()); } public static void append(Aa a1, Aa a2) { a1.setA(a2.getA()); a2 = a1; } } class Aa { private int a; public Aa(int a) { this.a = a; } public int getA() { return a; } public void setA(int a) { this.a = a; } } 感觉还是有点问题,如果append方法中的b=a;操作只是改变了append方法的中b的指向,并没有改变main方法中b的指向。那么上面我改的这个例子,好像不是这么回事 看你的这句.这样改成a1为2了.输出应该是全2 a1.setA(a2.getA()); 我奇怪的就是在 public static void append(Aa a1, Aa a2) { a1.setA(a2.getA()); a2 = a1; } 这当中a1 a2跟第七里面的StringBuffer难道不是一样的吗》?传递过来的都是对象的引用地址啊。既然StringBuffer在方法里面只是把局部变量b的指向修改了,而main没变,那我改的这个方法里面,有什么不同吗? 你自己画个图演示下不就知道了,你只是被最后出来的2,2 2,2的结果给弄糊涂了,你把你的append方法中的a1.setA(a2.getA());注释掉你再看看,你就明白了 |
|
返回顶楼 | |
发表时间:2011-03-07
forsecond 写道 msnvip 写道 forsecond 写道 /**
* @author 子弹哥 * */ public class TestRef { public static void main(String[] args) { Aa a1 = new Aa(1); Aa a2 = new Aa(2); append(a1, a2); System.out.println(a1.getA() + "," + a2.getA()); a2 = a1; System.out.println(a1.getA() + "," + a2.getA()); } public static void append(Aa a1, Aa a2) { a1.setA(a2.getA()); a2 = a1; } } class Aa { private int a; public Aa(int a) { this.a = a; } public int getA() { return a; } public void setA(int a) { this.a = a; } } 感觉还是有点问题,如果append方法中的b=a;操作只是改变了append方法的中b的指向,并没有改变main方法中b的指向。那么上面我改的这个例子,好像不是这么回事 看你的这句.这样改成a1为2了.输出应该是全2 a1.setA(a2.getA()); 我奇怪的就是在 public static void append(Aa a1, Aa a2) { a1.setA(a2.getA()); a2 = a1; } 这当中a1 a2跟第七里面的StringBuffer难道不是一样的吗》?传递过来的都是对象的引用地址啊。既然StringBuffer在方法里面只是把局部变量b的指向修改了,而main没变,那我改的这个方法里面,有什么不同吗? public static void append(Aa a1, Aa a2) { a1.setA(a2.getA()); a2 = a1; } 改成 public static void append(Aa a1, Aa a2) { a1.setA(a1.getA()+a2.getA()); a2 = a1; } 你就明白了。 |
|
返回顶楼 | |
发表时间:2011-03-07
append 方法和SET 能一样?
|
|
返回顶楼 | |
发表时间:2011-03-07
zhoupuyue 写道 forsecond 写道 msnvip 写道 forsecond 写道 /**
* @author 子弹哥 * */ public class TestRef { public static void main(String[] args) { Aa a1 = new Aa(1); Aa a2 = new Aa(2); append(a1, a2); System.out.println(a1.getA() + "," + a2.getA()); a2 = a1; System.out.println(a1.getA() + "," + a2.getA()); } public static void append(Aa a1, Aa a2) { a1.setA(a2.getA()); a2 = a1; } } class Aa { private int a; public Aa(int a) { this.a = a; } public int getA() { return a; } public void setA(int a) { this.a = a; } } 感觉还是有点问题,如果append方法中的b=a;操作只是改变了append方法的中b的指向,并没有改变main方法中b的指向。那么上面我改的这个例子,好像不是这么回事 看你的这句.这样改成a1为2了.输出应该是全2 a1.setA(a2.getA()); 我奇怪的就是在 public static void append(Aa a1, Aa a2) { a1.setA(a2.getA()); a2 = a1; } 这当中a1 a2跟第七里面的StringBuffer难道不是一样的吗》?传递过来的都是对象的引用地址啊。既然StringBuffer在方法里面只是把局部变量b的指向修改了,而main没变,那我改的这个方法里面,有什么不同吗? public static void append(Aa a1, Aa a2) { a1.setA(a2.getA()); a2 = a1; } 改成 public static void append(Aa a1, Aa a2) { a1.setA(a1.getA()+a2.getA()); a2 = a1; } 你就明白了。 ![]() |
|
返回顶楼 | |
发表时间:2011-03-07
onlylau 写道 forsecond 写道 msnvip 写道 forsecond 写道 /**
* @author 子弹哥 * */ public class TestRef { public static void main(String[] args) { Aa a1 = new Aa(1); Aa a2 = new Aa(2); append(a1, a2); System.out.println(a1.getA() + "," + a2.getA()); a2 = a1; System.out.println(a1.getA() + "," + a2.getA()); } public static void append(Aa a1, Aa a2) { a1.setA(a2.getA()); a2 = a1; } } class Aa { private int a; public Aa(int a) { this.a = a; } public int getA() { return a; } public void setA(int a) { this.a = a; } } 感觉还是有点问题,如果append方法中的b=a;操作只是改变了append方法的中b的指向,并没有改变main方法中b的指向。那么上面我改的这个例子,好像不是这么回事 看你的这句.这样改成a1为2了.输出应该是全2 a1.setA(a2.getA()); 我奇怪的就是在 public static void append(Aa a1, Aa a2) { a1.setA(a2.getA()); a2 = a1; } 这当中a1 a2跟第七里面的StringBuffer难道不是一样的吗》?传递过来的都是对象的引用地址啊。既然StringBuffer在方法里面只是把局部变量b的指向修改了,而main没变,那我改的这个方法里面,有什么不同吗? 你自己画个图演示下不就知道了,你只是被最后出来的2,2 2,2的结果给弄糊涂了,你把你的append方法中的a1.setA(a2.getA());注释掉你再看看,你就明白了 谢谢哈。 ![]() |
|
返回顶楼 | |
发表时间:2011-03-07
akunamotata 写道 引用 4.那么(a == (x + y))为什么是false呢?这点暂点有点不大清楚。初步认为是x+y是引用相加,不能放入常量池。
求解 执行x+y时,JVM首先会在堆中创建一个StringBuilder类,同时用x指向的拘留字符串对象完成初始化,然后调用append方法完成对y所指向的拘留字符串的合并操作,接着调用StringBuilder的toString()方法在堆中创建一个String对象,最后将刚生成的String对象的堆地址存放在x+y中。而局部变量a存储的是常量池中"abcd"所对应的拘留字符串对象的地址,所以a和x+y的地址不一样 |
|
返回顶楼 | |
发表时间:2011-03-07
li463968565 写道 append 方法和SET 能一样?
在这个题里造成效果都一样。都是改变了内存里的值。 传递的参数虽然时副本,但是指向的值是同一个。 |
|
返回顶楼 | |
发表时间:2011-03-07
freish 写道 新手贴?
《java解惑》上都有的东西啊。。。。 这个书,还是得看 我只能说书上有的东西,并不是你的东西。你看过那本书也不能说明任何问题。只有转化到自已的大脑才是最好的。 |
|
返回顶楼 | |