求 Java 大佬帮忙分析下这个程序

2022-11-15 13:58:58 +08:00
 jawe001
class A {}
class B extends A {}

public class Test {
	public static void main(String[] args) {
		B b = new B();
		A a = new A();
		// System.out.println(b.getClass() == A.class);	//报错 1
		// System.out.println(b.getClass() == a.getClass());	// false 2
		System.out.println(b.getClass() == B.class);	// true 3
	}
}

为什么 1 这个位置会产生报错呢?b.getClass() 得到的结果是 class B,而 A.class得到的结果是 class A== 不是可以比较两个具有父子关系的两个对象吗?而 B 和 A 是有继承关系的呀。按我理解结果应该是 false ,但是编译器给出的结果却是报错,不太理解。

第 2 个位置b.getClass() 得到的结果是class Ba.getClass() 得到的结果是class A,得出的结果是 false ,这个和第 1 个位置有什么不同呢?第 1 个位置和第 2 个位置结果都是class Aclass B,但第一个却是报错的。

请问大佬这是为啥呢?

2460 次点击
所在节点    Java
21 条回复
MineDog
2022-11-28 09:25:06 +08:00
java 语言规范中有相关描述,不过没有规定更具体场景,https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.21.3

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/895388

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX