读书札记2022 2019-11-07 10:09 采纳率: 0%
浏览 303
已采纳

为什么打印出来的是person类型?但在转换为person类型时要强制转换??不然报错

为什么打印出来的是person类型?但在转换为person类型时要强制转换??不然报错
public class Test {

public static void main(String[] args) {

     HashSet hs = new HashSet();

     hs.add(new Person("a1",11));   //将Person类添加进Hashset里面

     Iterator it = hs.iterator();   //定义1个迭代器

     while(it.hasNext()) //开始遍历HashSet
        {
          System.out.println(it.next().getClass().toString());   //测试类型,结果为class Person

            Person p = (Person) it.next();   //编译通过

            Person p = it.next();           //编译报错
        }

}

}

  • 写回答

3条回答 默认 最新

  • threenewbee 2019-11-07 10:32
    关注

    getClass()永远返回的是真实类型,而不是变量的类型,因为变量的类型是代码编写者此刻知道的,要是getClass()不能返回真实类型,要它何用。

    Person p = it.next(); 这个肯定不可以,因为编译的时候不能判断it.next()返回了什么类型,万一它返回的不是Person而是别的什么东西呢。

    特别注意两个概念:编译时运行时。编译的时候能确定的事情和运行的时候才能确定的事情。getClass()是运行时获取的,所以能知道具体类型
    Person p = it.next(); 这里next()返回的类型是object,编译器无法知道它是不是Person

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?