一个简单的例子?为什么结果会不同 你调用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 JTable排序后再向里面插数据报错 如何避免大量的重复代码? 求救java.lang.noclass问题 关于文字显示问题 求四本java书的电子版,分数可以商量,最少每本100分 一个运行是发生的错误 请问各位兄弟姐妹《Java 经典实例 》在那里有免费下载啊 拿到一个项目的java源程序,有185个文件,怎么看?来着有分,不够再加。 JAVA高手们...帮忙...急! Java中的强制类型转换?求大神解答! 关于字符集的问题,究竟什么是“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