关于 java 引用传递和值传递,你的知否?
为什么sun要这么 做
public class Test03 {
public static void main(String[] args) {
StringBuffer s = new StringBuffer("good");
StringBuffer s2 = new StringBuffer("bad");
test(s, s2);
System.out.println(s);// 9 goodhah这里为什么是 goodhah
System.out.println(s2);// 10 bad
但这里为什么是 bad
}
static void test(StringBuffer s, StringBuffer s2) { // 此
System.out.println("s="+s);// 1 good
System.out.println("s2="+s2);// 2 bad
s2 = s;// 3
s = new StringBuffer("new");// 4
System.out.println("s="+s);// 5 new
System.out.println("s2="+s2);// 6 good
s.append("hah");// 7goodhah
s2.append("hah");// 8
System.out.println("s="+s+">>>>>>>>>");// 9 newhah
System.out.println("s2="+s2+">>>>>>>>>");// 10 goodhah
}
高手们解答 一下
[解决办法]
你既然会提出这个问题,那么我的解释相信你也还是会云里雾里。
我给你剖析下以下这行代码,你再重新分析过代码。
StringBuffer s = new StringBuffer("good");
1、在jvm中的栈里创建了一个变量s
2、在jvm中的堆里创建了一个StringBuffer对象的区域,里面存有值“good”
3、变量s的引用指向上述2所创建的堆区域
也就是说在jvm里s和new StringBuffer("good")是分开的,这也是解除你疑惑的关键点
再给你剖析下s2 = s;这行代码:
s2这个变量的引用指向s这个变量的引用
[解决办法]
简单来说 就是,变量是变量 , 值是值。
[解决办法]
答案是 java中只有值传递
[解决办法]
楼主看下这篇帖子 你会受益匪浅
http://bbs.csdn.net/topics/390245117
[解决办法]
java 都是值传递。。。引用传的地址的值而已
[解决办法]
s2 = new StringBuffer(s.toString());System.out.println("s=" + s);// 5 new
System.out.println("s2=" + s2);// 6 good
s.append("hah");// 7goodhah
s2.append("hah");// 8
System.out.println("s=" + s + ">>>>>>>>>");// 9 newhah
System.out.println("s2=" + s2 + ">>>>>>>>>");// 10 goodhah
}