一个简单问题,请问为什么,数据出来的还是A,B 你在执行operate(sbA,sbB);句时,每一个StringBuffer对象都同时有两个引用指向它,所以你交换时只是交换的其中一对引用(a_sbA,a_sbB),另外一对引用就是sbA,sbB仍然指向原来的对象,所以你输出的时候没有改变 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 java 是靠值传递的,所以你传进去的引用是不会被改变的,只有引用所指向的对象能被改变,而随着引用一同传回来。 在Java里只有基本类型是传值的(byVal),如果想传引用就要使用相应的封装类(Integer,Double),与其它语言不同的是Java把String为基本类型,它没有相应的封装类,但可以使用StringBuffer来代替.其它由Object派生的类,都是传引用的(byRef) java语言和C,C++语言不同,java语言在任何时候函数参数都是传值调用,你的函数体中调换的只是函数的两个参数的引用,并没有改变原来的的两个。 public class question5 { public question5() { } public static void main(String[] args) { StringBuffer sbA = new StringBuffer("A"); StringBuffer sbB = new StringBuffer("B"); operate(sbA,sbB); System.out.println(sbA +","+ sbB); } private static void operate(StringBuffer a_sbA,StringBuffer a_sbB) {// a_sbA.append(a_sbB); a_sbA = a_sbB; // System.out.println(a_sbA); a_sbB = a_sbA; // System.out.println(a_sbB); }}在这种情况下,System.out.println(sbA +","+ sbB);中没有与operate()有关系的的操作。所以呢就没有可能影响到System.out.println(sbA+","+sbB).例如小明和小红两个人,小红拿走了一个苹果,把苹果给染成了黑色的,而小明拿了一个苹果是绿色的。那么这里问的就是小明手里的苹果是什么颜色的。自然是不变化的。 java 图片管理系统 异常问题,大家帮忙解决一下,先谢谢了 请问一个关于僵尸进程的问题 [紧急]poi操作excel,发现getRow或者getCell会出现NULL。 关于ArrayList查找问题,请指教 求教一个SQL jubilder8和IE有关系吗? 请问各位大哥,这个问题怎么办???在线等。。。。。。。。。。。。。。。 编译提示 我又有问题!(50)分 快,下载算法ebook(10部算法经典著作的合集) ! 发现java的Bug!
public question5() {
}
public static void main(String[] args) {
StringBuffer sbA = new StringBuffer("A");
StringBuffer sbB = new StringBuffer("B");
operate(sbA,sbB);
System.out.println(sbA +","+ sbB);
}
private static void operate(StringBuffer a_sbA,StringBuffer a_sbB) {
// a_sbA.append(a_sbB);
a_sbA = a_sbB;
// System.out.println(a_sbA);
a_sbB = a_sbA;
// System.out.println(a_sbB);
}
}
在这种情况下,System.out.println(sbA +","+ sbB);中没有与operate()有关系的的操作。所以呢就没有可能影响到System.out.println(sbA+","+sbB).例如小明和小红两个人,小红拿走了一个苹果,把苹果给染成了黑色的,而小明拿了一个苹果是绿色的。那么这里问的就是小明手里的苹果是什么颜色的。自然是不变化的。