我編寫了一些代碼來理解如果將原始對象,可變對象或不可變對象存儲到Array對象中會發生什麼情況。我可否在存儲後修改它們,看看它是否正確解除了這些事情並返回了修改後的值。我沒有得到我期望的代碼要做的事情?我想我知道爲什麼,並且想澄清這種理解是否正確。這是代碼。瞭解對Java Object Object中對象的引用
public class DriverApp3 {
private static String CYEAR = "2014" ;
private static StringBuffer CYEARFLG = new StringBuffer("1914") ;
public double money = 2.13 ;
public static void main(String args[])
{
Integer j = 12 ;
DriverApp3 d = new DriverApp3();
StringBuffer sb = new StringBuffer("Unicorn");
MutableInteger mi = new MutableInteger(67);
int i = 76 ;
Object[] parseXML = new Object[]{j,DriverApp3.CYEAR,d, d.money,DriverApp3.CYEAR, sb, mi, DriverApp3.CYEARFLG,i};
// 0 1 2 3 4 5 6 7 8
System.out.println("======chng of all original values ==========");
j = 13 ;
d.money = 3.14 ;
parseXML[4]="2015";
DriverApp3.CYEAR = "2013";
mi.set(9);
sb.replace(3,5,"KO");
DriverApp3.CYEARFLG.replace(0,4,"1939");
i = 7 ;
Object[] chngdO = new Object[]{j,DriverApp3.CYEAR,d, d.money,DriverApp3.CYEAR, sb, mi, DriverApp3.CYEARFLG,i};
int cnt = 0 ;
for (Object m : parseXML)
{
Integer s_objid = m.hashCode();
String clsType = "Type="+m.getClass().getTypeName();
String clsName = "SimplName="+m.getClass().getSimpleName();
String canName = "CanonName="+m.getClass().getCanonicalName();
Object n = chngdO[cnt];
Integer ns_objid = n.hashCode();
String nclsType = "Type="+n.getClass().getTypeName();
String nclsName = "SimplName="+n.getClass().getSimpleName();
String ncanName = "CanonName="+n.getClass().getCanonicalName();
System.out.println(cnt + ": Hashcode=" + s_objid + ":" + clsType + ":" + m + "\n " + ": Hashcode=" + ns_objid + ":" + nclsType /*+ ":"+ clsName+ ":"+ canName*/+ ":" + n + "\n");
cnt++ ;
}
}
@Override
public String toString()
{
return "Hashcode="+this.hashCode() + "," + DriverApp3.CYEAR ;
}
}
的可變類也在這裏.....
/** * * 從stackoverflow.com @author代碼片段*不是線程安全的 */ 公共類MutableInteger {
private int value;
public MutableInteger(int value) {
this.value = value;
}
public void set(int value) {
this.value = value;
}
public int intValue() {
return value;
}
public String toString()
{
return "id="+this.hashCode()+" val=" + this.value ;
}
}
我的應用程序的輸出是.....
======chng of all original values ==========
0:Hashcode方法= 12:種類= java.lang.Integer中:12 :Hashcode方法= 13:種類= java.lang.Integer中:13
1:Hashcode方法= 1537249:種類= java.lang.String中:2014 :Hashcode方法= 1537248:種類= java.lang.String中:2013
2:Hashcode方法= 366712642:種類= Xander的。 DirRefOrCopy.DriverApp3:Hashcode = 366712642,2013 :Hashcode = 366712642:Type = xander.DirRefOrCopy.DriverApp3:哈希碼= 366712642,2013
3:哈希碼= 815979831:種類= java.lang.Double中:2.13 :哈希碼= 300063655:種類= java.lang.Double中:3.14
4:哈希碼= 1537250:類型= java.lang.String中:2015年 :Hashcode方法= 1537248:種類= java.lang.String中:2013
5:Hashcode方法= 1829164700:種類= java.lang.StringBuffer中:UniKOrn :Hashcode方法= 1829164700:種類= java.lang.StringBuffer:UniKOrn
6:Hashcode = 2018699554:Type = xander.DirRefOrCopy.MutableInteger:id = 2018699554 val = 9 :Hashcode方法= 2018699554:種類= xander.DirRefOrCopy.MutableInteger:ID = 2018699554 VAL = 9
7:Hashcode方法= 1311053135:種類= java.lang.StringBuffer中:1939年 :Hashcode方法= 1311053135:種類= java.lang中.StringBuffer:1939
8:Hashcode方法= 76:種類= java.lang.Integer中:76 :Hashcode方法= 7:種類= java.lang.Integer中:7