public class A {
public static void main (String [] args) {
StringBuffer a = new StringBuffer ("A");
StringBuffer b = new StringBuffer ("B");
operate (a,b);
System.out.println(a + "," +b);
}
static void operate (StringBuffer x, StringBuffer y) {
x.append (y);
y = x;
}
}最后的输出是AB,B
可是我觉得 x.append (y);改为x = x.append (y);才应该输出是AB,B啊...
哪位说下原因,先谢谢了...
public static void main (String [] args) {
StringBuffer a = new StringBuffer ("A");
StringBuffer b = new StringBuffer ("B");
operate (a,b);
System.out.println(a + "," +b);
}
static void operate (StringBuffer x, StringBuffer y) {
x.append (y);
y = x;
}
}最后的输出是AB,B
可是我觉得 x.append (y);改为x = x.append (y);才应该输出是AB,B啊...
哪位说下原因,先谢谢了...
解决方案 »
- 谁可以帮我解决一下关于javadoc的问题
- 线程的一个小问题
- 一个非常奇怪的在网络环境下的objectinputstream\objectoutputstrem问题
- 基础问题:javabean实现serializable有什么用?为什么数据库持久就Bean实现这个接口?分不够再加!
- 装了sql server补丁 和 jdbc驱动怎么还访问不了数据库?
- ViewURL是一个类,object==ViewURL.this是什么意思?特别是那个this
- 为什么在jbuilder写好的中文一保存再打开就成了\u008之类的了?
- 过两天可能要用JAVA~开发一个什么工程项目管理的什么软件~具体怎么样我还不知道~
- 如何在weblogic6.1中加入一个已写好的应用(.ear)文件,为什么出错?????
- 一个弱智问题:Color.red意思?为何类Color后直接引用,不声明一个对象,red未常数?
- 为什么我的jdbc直接访问SQL server,只能访问系统表(在线等)
- 应用数据库中的循环问题
为什么b的值没有变呢?
在方法operate方法 中不是已经把x的值给y了么?
难道在operate方法 中只有append对实参起作用,赋值语句不对实参起作用么?
谢谢各位解答一下
首先从main方法入手。
StringBuffer a = new StringBuffer ("A");和StringBuffer b = new StringBuffer ("B");
new了a和b两个对象,通过operate传递给了operate方法。在此方法中x.append (y);也就是说对象有了实质的改变:对象a通过 x.append (y);又新增了对象B中的“B”,此时对象a变成了AB。
这道题的具体是看参数的传递。任何参数的传递其实都是传递对象的副本。而x.append (y);其实是改变了对象,而不是改动了副本。
public static void main (String [] args) {
StringBuffer a = new StringBuffer ("A");
StringBuffer b = new StringBuffer ("B");
operate (a,b);
System.out.println(a + "," +b);
}
static void operate (StringBuffer x, StringBuffer y) {
x.append (y);
y = x;
}
}
这是道经典的面试题,考的是你的java基础牢固否。我们知道,一个方法的形式参数相当于这个方法的局部变量,x.append(y)大家都清楚了,这里不多说。y = x,这个只是在operate这个方法里的局部变量的赋值操作,一旦方法体结束,它们的有效范围也到了尽头,所以不会有任何作用的。所以最终b是不会发生改变的。