我已经将错误隔离到这一行: string.getClass() == jojo.getClass() 这行不应该创建两个 Class 对象,然后检查它们(如在两个引用中)是否指向同一个对象?代码不会运行,而不是返回 false 值。
public class Tester
{
public static void main(String[] args)
{
OreoJar jojo = new OreoJar(0);
OreoJar momo = new OreoJar(1);
String string = "Hello";
if (momo.getClass() == jojo.getClass())
{
System.out.println("Momo and jojo are of the same class");
}
if (string.getClass() == jojo.getClass())
{
System.out.println("String and jojo are of the same class");
}
}
}
public class OreoJar
{
int oreos;
public OreoJar(int oreos)
{
this.oreos = oreos;
}
public void count()
{
System.out.println(oreos + " oreos in this jar!");
}
}
这个评论有点隐藏,我认为值得一提,因为它对初学者(比如我自己)最有意义
- 根据 JLS “如果无法通过强制转换将任一操作数的类型转换为另一个操作数的类型,则这是编译时错误”,因此可以比较类型 A 和 B 的两个引用,如果且仅如果,A 可以转换为 B,或者 B 可以转换为 A。——Patricia Shanahan