目的:加深對java引用變量的了解,避免資料的處理的偏差。
問題:
1.一個集合List ,将建立Student對象stu放入List之後,再給stu的成員變量例如id,name指派。此時List中的stu的值改變了嗎?
2.一個Student的對象stu,當做modifyStuName()方法的參數傳入。此時在該方法體内執行stu.setName("value"); ,被調函數的stu對象的name值改變了嗎?
3.一個Student的對象stu,stu的id為001,name為張三。建立stu2對象,執行stu2=stu; stu2.setName(); ,此時stu對象的name值發生改變了嗎?
4.一個Student的對象stu,當做方法的參數傳入方法體内。此時将該stu對象作為該方法的傳回值,被調函數中的這兩個對象是同一個對象嗎?
好了,開始:
學生類:
package indi.bruce.test007;
public class Student {
private int id ;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
下面的例子對應上述的4個問題
package indi.bruce.test007;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
public class TestHaHa {
@Test
public void scene1(){
List<Student> stuList = new ArrayList<Student>();
Student stu = new Student();
stuList.add(stu);
stu.setId(001);
stu.setName("尼古拉斯趙四");
stu.setAge(23);
put(stuList.get(0).getId());
put(stuList.get(0).getName());
put(stuList.get(0).getAge());
}
@Test
public void scence2(){
Student stu = new Student();
stu.setName("神探夏洛克");
modifyStuName(stu);
put("修改後:"+stu.getName());
}
public void modifyStuName(Student stu){
put("修改前:"+stu.getName());
stu.setName("夏洛特煩惱");
}
@Test
public void scence3(){
Student stu = new Student();
stu.setName("張飛");
put(stu.getName());
Student stu2 = stu;
stu2.setName("關羽");
put(stu.getName());
put(stu2.getName());
}
@Test
public void scence4(){
Student stu = new Student();
stu.setName("go to hell");
Student stu2 = bridge(stu);
put(stu.equals(stu2));
put(stu == stu2);
}
public Student bridge(Student stu){
return stu;
}
public static void put(Object obj){
System.out.println(obj);
}
}
4個例子輸出的情況分别為:
1
尼古拉斯趙四
23
答1:改變了
修改前:神探夏洛克
修改後:夏洛特煩惱
答2:改變了
張飛
關羽
關羽
答3:改變了
true
true
答4:同一個 ,用"==" 比較是比較一下兩個對象的記憶體位址是否相等。
以上疑問,請到我總結的應用變量第一節:http://www.cnblogs.com/xxyfhjl/p/4574057.html