hgl125
2015-03-18 14:33
采纳率: 14.3%
浏览 2.4k
已采纳

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条回答 默认 最新

  • danielinbiti 2015-03-18 15:44
    已采纳

    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());
        }
    
    点赞 评论

相关推荐 更多相似问题