我的程序是不是涉及了传值或者引用?
这是我的程序!当中的money属于传值还是引用的呢?又是如何区分出属于传值还是引用的呢?
public class Bank implements Runnable {
int money=200;
public void setMoney(int n){
money=n;
}
@Override
public void run() {
// TODO Auto-generated method stub
if(Thread .currentThread().getName().equals("会计"))
saveOrTake(300);
else if(Thread.currentThread().getName().equals("出纳"))
saveOrTake(150);
}
//承接上面的方法 saveOrTake()
private void saveOrTake(int amount) {
if(Thread.currentThread().getName().equals("会计")){
for(int i=1;i<=3;i++){
money=money+amount/3;
System.out.println(Thread.currentThread().getName()+"加入"+amount/3+",账上有"+money+"万,休息一会再取");
try{
Thread.sleep(1000);
}
catch(InterruptedException e){ }
}
}
else if(Thread.currentThread().getName().equals("出纳")){
for(int i=1;i<=3;i++){
money=money-amount/3;
System.out.println(Thread.currentThread().getName()+"取出"+amount/3+",账上有"+money+"万,休息一会再取");
try{
Thread.sleep(1000);
}
catch(InterruptedException e){}
}
}
}
}
------解决方案--------------------
看这里的代码money是引用。因为money是全局变量,并不是传递到哪个方法里,都是方法里直接使用的全局money。区分个人感觉很简单,传递的就是传值,直接使用的就是引用喽!
Java code
private String a = "";
public void setAaa(String a) {
this.a = a;//this.a就是引用,而a就是传值。因为这个方法传递了一个跟全局变量a一样的变量,所以为了区分必须写this.a,否则认为是传递的a变量
}
public String getAaa(){
return a;//这里只有一个a,那么可以省略this.直接使用便可!
}