我有一个功能

public void get(Object s) {

  while (s.getClass().getSuperclass() != null) {
      s = s.getClass().getSuperclass();
  }
}


事实是,即使s.getClass().getSuperclass()没有超类,null也不会返回Object

我不明白为什么会这样,尽管我多次调试了该项目。

最佳答案

在这里,您将一个类分配给s

s = s.getClass().getSuperclass();


那么循环条件是:

s.getClass().getSuperclass();


Class对象的类为Class.class,其getSuperclass返回Object.class,因此循环条件的值为true。

然后将s分配给Object.class

s = s.getClass().getSuperclass();


谁的班级是Class.class并且具有超类。无限重复广告。

为该类使用其他变量。

Class<?> cls = s.getClass().getSuperclass();
while(cls != null) {
    cls = cls.getSuperclass();
}

10-07 12:19