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

为什么打印出来的是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条)

报告相同问题?

悬赏问题

  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波
  • ¥15 针对曲面部件的制孔路径规划,大家有什么思路吗
  • ¥15 钢筋实图交点识别,机器视觉代码
  • ¥15 如何在Linux系统中,但是在window系统上idea里面可以正常运行?(相关搜索:jar包)
  • ¥50 400g qsfp 光模块iphy方案
  • ¥15 两块ADC0804用proteus仿真时,出现异常