pubic class test {
pubLic static void mb ( StringBuffer x , StringBuffer Y )
X . append ( y );
public static void main ( String [] args ){ //args :{}
StringBuffer a = new StringBuffer (" A ");// a :" AB "
StringBuffer b = new StringBUffer (" B "); //b :" B "
mb ( a , b );
System . out . println ( a +","+ b );
//a :" AB " b :" B "
想问一下这个为什么输出还是ABB,那个y=x没有作用吗?
这里涉及到Java值传递的问题
图一
图二
图三
图三的1,2步对应的是图一的1
图三的3对应的是图二的2
说明
在mb方法中的形参x,y对应实参a,b,这里是x和y指向a和b的内存地址。x的修改内容可以改a的内容,但是y=x只是把x的指向地址复制给y,即x和y同时指向a地址,但是b的内容没有没有发生任何改变。所以控制台输出依然是ABB
package test2;
public class ThreadTest {
// public static void main(String[] args) {
// ThreadSale threadSale = new ThreadSale();
// Thread t1 = new Thread(threadSale,"第1售票窗口");
// Thread t2 = new Thread(threadSale,"第2售票窗口");
// Thread t3 = new Thread(threadSale,"第3售票窗口");
// Thread t4 = new Thread(threadSale,"第4售票窗口");
// t1.start();
// t2.start();
// t3.start();
// t4.start();
// }
public static void main(String[] args) {
StringBuffer a = new StringBuffer("A");
StringBuffer b = new StringBuffer("B");
mb(a,b);
b = a;
System.out.println(a + "," + b);
}
public static void mb(StringBuffer x,StringBuffer y) {
x.append(y);
}
}
class ThreadSale implements Runnable {
int tickets = 120;
@Override
public synchronized void run() {
while (true) {
if (tickets > 0) {
System.out.println(Thread.currentThread().getName()
+ "售票机第" + tickets-- + "号;");
}else {
System.exit(0);
}
}
}
}
它是对传进来的StringBuffer赋值,是对引用赋值,指向新的数据,但原来的数据是没有改动的,所以还是 B。
y=x;起作用了,但是并没有附加到主方法b里面
public static void mb(StringBuffer X, StringBuffer Y){
X.append(Y);//append是把值附加到X和a
Y=X;//这个只是把x值加到Y了,并没有附加到b
System.out.println("X:"+X);
System.out.println("Y:"+Y);
}
public static void main(String [] args){
StringBuffer a = new StringBuffer("A");// a :" AB "
StringBuffer b = new StringBuffer("B"); //b :" B "
mb (a,b);
System.out.println ( a +","+ b );
}
结果
这正是是字符串常量与字符串变量的区别
首先StringBuffere是String的增强,
https://blog.csdn.net/fengyun14/article/details/1199751?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-1199751-blog-121180265.pc_relevant_antiscanv2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-1199751-blog-121180265.pc_relevant_antiscanv2&utm_relevant_index=2
你把a.append(b);这个结果拼接了,肯定是AB。
那么我们来分析一下,为什么b输出B呢?
是因为StringBuffer b)这里是局部变量,你把b=a;这里确实等于AB,但是这个变量的范围是这个方法,方法结束,变量消失,带不出去的。