程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> 指針-Java對象引用指向的問題

指針-Java對象引用指向的問題

編輯:編程綜合問答
Java對象引用指向的問題

有以下代碼:
package com.lzw;
import java.util.*;
public class UpdateStu implements Comparable{
String name;
long id;
public UpdateStu(long id, String name) {
this.id = id;
this.name = name;
}
public int compareTo(Object o) {
UpdateStu upstu = (UpdateStu) o;
int result = id > upstu.id ? 1 : (id == upstu.id ? 0 : -1);
return result;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public static void main(String[] args) {
UpdateStu stu1 = new UpdateStu(112,"李同學");
UpdateStu stu2 = new UpdateStu(113,"陳同學");
UpdateStu stu3 = new UpdateStu(114,"王同學");
UpdateStu stu4 = new UpdateStu(115,"馬同學");
UpdateStu stu5 = new UpdateStu(116,"趙同學");
TreeSet tree = new TreeSet();
System.out.println("對象tree的地址:"+tree);
tree.add(stu1);
System.out.println("對象stu1對象的地址:"+stu1);
tree.add(stu2);
System.out.println("對象stu2對象的地址:"+stu2);
tree.add(stu3);
System.out.println("對象stu3對象的地址:"+stu3);
tree.add(stu4);
System.out.println("對象stu4對象的地址:"+stu4);
tree.add(stu5);
System.out.println("對象stu5對象的地址:"+stu5);
Iterator it = tree.iterator();
System.out.println("迭代器it(指向)的地址:"+it);
System.out.println("tree.iterator()返回的地址:"+tree.iterator());
System.out.println("Set集合中的所有元素:");
int i=0;
while (it.hasNext()) {
String []dd={"stu1","stu2","stu3","stu4","stu5"};
UpdateStu stu = (UpdateStu) it.next();
System.out.println("stu->"+"對象"+dd[i]+"的地址:"+stu);
System.out.println(stu.getId() + " " + stu.getName());
i++;
}
it=tree.headSet(stu3).iterator();
System.out.println("截取前面部分的集合:");
while (it.hasNext()) {
UpdateStu stu = (UpdateStu) it.next();
System.out.println(stu.getId() + " " + stu.getName());
}
it = tree.subSet(stu2, stu3).iterator();
System.out.println("截取中間部分的集合");
while (it.hasNext()) {
UpdateStu stu = (UpdateStu) it.next();
System.out.println(stu.getId() + " " + stu.getName());
}
}
}
在Java語言裡沒有指針(地址)的概念,只用引用的概念,但是引用本身就是一個指向new分配的對象地址(希望我沒有理解錯誤),現在問題來了:
1、為什麼System.out.println("對象tree的地址:"+tree); 輸出的是:[]

2、為什麼System.out.println("迭代器it(指向)的地址:"+it);輸出的是:”java.util.TreeMap$KeyIterator@5c647e05“與System.out.println("tree.iterator()返回的地址:"+tree.iterator());輸出的:”java.util.TreeMap$KeyIterator@33909752“地址不一樣?

最佳回答:


1、為什麼System.out.println("對象tree的地址:"+tree); 輸出的是:[]
因為最終調用的是tostring,treeset的默認tostring方式是遍歷內部對象,如果沒有對象返回"[]",看源碼就知道了。

2、為什麼System.out.println("迭代器it(指向)的地址:"+it);輸出的是:”java.util.TreeMap$KeyIterator@5c647e05“與System.out.println("tree.iterator()返回的地址:"+tree.iterator());輸出的:”java.util.TreeMap$KeyIterator@33909752“地址不一樣?

tree.iterator()最終調用treemap的keyiterator的方法,源碼是中返回結果是new出來的,所以前後兩次不一樣。
 Iterator<K> keyIterator() {
        return new KeyIterator(getFirstEntry());
    }
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved