Java getClass() VS instanceof VS ==

本文详细解析了Java中getClass(), instanceof与==这三个概念的区别。getClass()用于获取对象的运行时类;instanceof用于判断对象是否为指定类或接口的实例;==则用于比较两个对象引用是否指向同一个对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java getClass() VS instanceof VS ==

含义

  • getClass() 返回调用对象object运行时类(runtime class),一个Class实例。
  • a instanceof T 返回a是否是T类型的实例或者T类型的子类型的实例
  • a == b 判断ab引用的是否是同一个对象

区分

getClass()的文档介绍如下:

Returns the runtime class of this Object.
The returned Class object is the object that is locked by static synchronized methods of the represented class.

The returned Class object is the object that is locked by static synchronized methods of the represented class
这句话的意思是在说明一个事实:

T.class = a.getClass()

返回的Class对象是该对象(Class对象)表示的类中的静态同步方法锁住的那个对象。

java中当同步关键字加在静态方法前面,当某个线程进入该方法时,必须是已经获得了该类对象(T.class)的锁。

下面两个写法效果相同:

  • 1
public static synchronized void foo() {
}
  • 2
public static void foo() {
  synchronized(T.class) {
  }
}

另外,java中的同步关键字的加锁粒度一般发生在普通对象类对象上,封锁范围一般可以是代码块一个方法整个类的所有方法等。


instanceof是一个操作符,返回值是falsetrue

instanceof不仅可以判断对象是否是某个类T或其子类的实例,还可以判断是否是某个接口I或其子接口I的实现类的实例。


==操作符是判断两个引用对应的对象是否是同一个。

equal()方法是自定义的判断的两个引用对应的对象是否逻辑相等。

转载于:https://www.cnblogs.com/Spground/p/8536147.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值