下面这段代码的运行结果是:AB.B
分析原因:也就是说在你的operate()方法中,参数是引用传递,也就是x,y分别为a,b引用的拷贝,在方法中,你给x追加了值,也就相应的改变了a的值,但是第二条语句:
y = x; 确实将引用y指向了另外一个对象x,这样y就和b指向不同的两个对象了,当然b的值也就不会改变了。
public class test2 {
public static void main(String sgf[]){
StringBuffer a=new StringBuffer("A");
StringBuffer b=new StringBuffer("B");
operate(a,b);
System.out.println(a+"."+b);
}
static void operate(StringBuffer x,StringBuffer y){
x.append(y);
y=x;
}
}
下面这段代码运行结果是:14
public class test3 {
String str = "1";
String[] strArr = {"2"};
public static void main(String[] args)
{
test3 app = new test3();
app.operate(app.str, app.strArr);
System.out.println(app.str +app.strArr[0]);
}
static void operate(String str, String[] strArr)
{
str = new String("3");
strArr[0] = new String("4");
}
}
下面这段代码运行结果是:2 24 46 6
分析:因为线程中用到了synchronized同步,所以在三个线程中的result和data的值分别是:2,2;4,4;6,6
然后注意到System.out.print(result+" "+ data);所以最终结果是2 24 46 6
public class test1 {
private int data;
int result=0;
public void m(){
result+=2;
data+=2;
System.out.print(result+" "+ data);
}
}
class ThreadExample extends Thread{
private test1 mv;
public ThreadExample(test1 mv){
this.mv=mv;
}
public void run(){
synchronized (mv){
mv.m();
}
}
}
class ThreadTest{
public static void main(String args[]){
test1 mv=new test1();
Thread t1=new ThreadExample(mv);
Thread t2=new ThreadExample(mv);
Thread t3=new ThreadExample(mv);
t1.start();
t2.start();
t3.start();
}
}