当前位置: 代码迷 >> J2SE >> java 基础有关问题
  详细解决方案

java 基础有关问题

热度:236   发布时间:2013-02-25 00:00:00.0
java 基础问题
小弟是java初学者,以下的程序是测试交换两个对象的方法实现。但是运行后却交换不了。我查阅了书,书中说java的参数传递类型只有“值传递”。那么如果想实现这样一个交换两个对象的方法具体应该怎么写呢?(我知道c++很容易实现的)
。谢谢回答。
public class mytest {  
  
public static void main(String[] args) {  

ObjectSample o1 = new ObjectSample("hello");  
ObjectSample o2 = new ObjectSample("你好");
 
System.out.println("before swap o1:"+o1.getTitle()+" o2:"+o2.getTitle());  
swapObject(o1, o2);  
System.out.println("after swap o1:"+o1.getTitle()+" o2:"+o2.getTitle());  
}  
static void swapObject(ObjectSample o1, ObjectSample o2){  
ObjectSample temp = new ObjectSample("temp");  
temp = o1;  
o1 = o2;  
o2 = temp;  
}  
}  

class ObjectSample{  
private String title;  
 
ObjectSample(String title){  
this.title = title;  
}  
 
public String getTitle(){  
return title;  
}  
}

------解决方案--------------------------------------------------------
Java code
public class mytest {    public static void main(String[] args) {        ObjectSample o1 = new ObjectSample("hello");        ObjectSample o2 = new ObjectSample("你好");        System.out.println("before swap o1:" + o1.getTitle() + " o2:"                + o2.getTitle());        swapObject(o1, o2);        System.out.println("after swap o1:" + o1.getTitle() + " o2:"                + o2.getTitle());    }    static void swapObject(ObjectSample o1, ObjectSample o2) {        String tmp = o1.getTitle();        o1.setTitle(o2.getTitle());        o2.setTitle(tmp);    }}class ObjectSample {    private String title;    ObjectSample(String title) {        this.title = title;    }    public String getTitle() {        return title;    }        public void setTitle(String title){        this.title = title;    }}
------解决方案--------------------------------------------------------
java中虽然可以叫“值传递” ,但是分开讲会更好些,对于基本数据类型我们叫“值传递”,对于对象叫“引用传递”更好。当然其实也都可以理解为“传值”。而你要交换的是属性的值,传递引用并不能改变其对象的属性和方法。当然那样是不行的。
------解决方案--------------------------------------------------------
java中对象是引用值的传递,你的
System.out.println("before swap o1:"+o1.getTitle()+" o2:"+o2.getTitle());
swapObject(o1, o2); //没有交换到
System.out.println("after swap o1:"+o1.getTitle()+" o2:"+o2.getTitle());
}
static void swapObject(ObjectSample o1, ObjectSample o2){ //相当与在方法体中交换了两个局部的对象,对你上面的o1,o2没影响
ObjectSample temp = new ObjectSample("temp");
temp = o1;
o1 = o2;
o2 = temp;
}
  相关解决方案