一个简单的例子?为什么结果会不同 你调用operate()的时候,生成一个指向原字符串B的引用y,在函数里面你把这个y指向别处,并没有改变B的值,所以B仍然是原来的B;而x是直接修改它所指向的A,所以A变了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Tasia(非典型…………) 说的完成正确,我做了一个小例子import java.lang.*;public class a { public static void main(String arga[]){ StringBuffer a=new StringBuffer("A"); StringBuffer b=new StringBuffer("B"); System.out.println(operate(a,b)); /*a.append(b); b=a; */ System.out.println(a+","+b);}static StringBuffer operate(StringBuffer x,StringBuffer y){ x.append(y); y=x; return y;}}结果是:ABAB,B 这样就是来证明JAVA中是基于传值而不是指针的. Tasia(非典型…………) 说的完成正确,我做了一个小例子import java.lang.*;public class a { public static void main(String arga[]){ StringBuffer a=new StringBuffer("A"); StringBuffer b=new StringBuffer("B"); System.out.println(operate(a,b)); /*a.append(b); b=a; */ System.out.println(a+","+b);}static StringBuffer operate(StringBuffer x,StringBuffer y){ x.append(y); y=x; return y;}}结果是:ABAB,B但是x呢,它在operate里面也是传的值呀,它的值在operate里面改变了(从A变成了AB),但是回到外面的语句体,x本身的值并没有改变呀,y的例子不是很好的说明这点吗,他原来的值是B,在operate里面赋值以后,变成AB,由于传的是值,所以在外面的语句体显示出来还是B。这该怎么解释呢? no,楼主理解错误。x是值,它是个StringBuffer对象的引用值,和普通变量有点不一样:在x.append(y);后,是x通过了StringBuffer的方法改变了对象的值,它所引用的对象和a引用的是一个对象,它的变化是对象的变化,而不是x的变化,所以会有你看到的结果。要搞清1、java对象和对象引用的概念。2、通过方法改变的是heap(你现在可以理解为内存地址)中的值,而不是x本身。 楼上的认识完全正确,我补充一点。通过方法改变了heap中的值以后,从方法中出来。原来的应用所指向的依然是原来的对象。即:对象内容变了,引用本身没有变。所以第一次b的输出为:B而非:AB 下面是个退出语句,如何添加到类中执行起来,举个例子谢谢 求助,请各位高手帮忙解决一个问题 想用java做一个加密软件,谁能给我一点思路吗? 一个相对简单的问题! 创建包和使用包的问题! 怎么读取Unicode编码的数据流(2个字节存储一个字符)? System.getProperty("iscp932")什么意思, 救命啊各位大侠...!!! 分别运行在两个jvm中的程序如何通信? JSDK1.3中为什么找不到jsdk.jar这个文件? 关于字符集的问题,究竟什么是“ISO 8859-1”,还有其它字符集吗?有什么区别? switch 问题
public class a {
public static void main(String arga[]){ StringBuffer a=new StringBuffer("A");
StringBuffer b=new StringBuffer("B");
System.out.println(operate(a,b)); /*a.append(b);
b=a;
*/
System.out.println(a+","+b);
}
static StringBuffer operate(StringBuffer x,StringBuffer y){
x.append(y);
y=x;
return y;
}}结果是:
AB
AB,B
public class a {
public static void main(String arga[]){ StringBuffer a=new StringBuffer("A");
StringBuffer b=new StringBuffer("B");
System.out.println(operate(a,b)); /*a.append(b);
b=a;
*/
System.out.println(a+","+b);
}
static StringBuffer operate(StringBuffer x,StringBuffer y){
x.append(y);
y=x;
return y;
}}结果是:
AB
AB,B
但是x呢,它在operate里面也是传的值呀,它的值在operate里面改变了(从A变成了AB),但是回到外面的语句体,x本身的值并没有改变呀,y的例子不是很好的说明这点吗,他原来的值是B,在operate里面赋值以后,变成AB,由于传的是值,所以在外面的语句体显示出来还是B。这该怎么解释呢?
x是值,它是个StringBuffer对象的引用值,和普通变量有点不一样:在x.append(y);后,是x通过了StringBuffer的方法改变了对象的值,它所引用的对象和a引用的是一个对象,它的变化是对象的变化,而不是x的变化,所以会有你看到的结果。
要搞清1、java对象和对象引用的概念。2、通过方法改变的是heap(你现在可以理解为内存地址)中的值,而不是x本身。
通过方法改变了heap中的值以后,从方法中出来。原来的应用所指向的依然是原来的对象。
即:对象内容变了,引用本身没有变。
所以第一次b的输出为:B
而非:AB