Java getClass() VS instanceof VS ==
2017-11-19 17:34
302 查看
Java getClass()
VS instanceof
VS ==
含义
getClass()返回调用对象
object的运行时类(
runtime class),一个
Class实例。
a instanceof T返回
a是否是
T类型的实例或者
T类型的子类型的实例
a == b判断
a和
b引用的是否是同一个对象
区分
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是一个操作符,返回值是
false或
true。
instanceof不仅可以判断对象是否是某个类
T或其子类的实例,还可以判断是否是某个接口
I或其子接口
I的实现类的实例。
==操作符是判断两个引用对应的对象是否是同一个。
equal()方法是自定义的判断的两个引用对应的对象是否逻辑相等。
相关文章推荐
- Java: instanceOf vs getClass
- Java A instanceof B vs B.isInstance(A) vs B.class.isAssignableFrom(A.class)
- java.lang.IllegalArgumentException: object is not an instance of declaring class
- java.lang.IllegalArgumentException: object is not an instance of declaring class
- Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener. ...nested exception is java.lang.NoSuchMethodError:
- nested exception is java.lang.IllegalArgumentException: object is not an instance of declaring class
- instanceof and getClass()
- java反射错误:object is not an instance of declaring class
- 彩票案例-IOS的isKindOfClass(类似JAVA的instance方法)
- 异常笔记(2)--object is not an instance of declaring class while invoking public abstract java.lang.Long
- Another method get instance of JAVA Object
- java:No enclosing instance of type Classname is accessible. Must qualify the allocation
- get static value of class by java reflection
- JNI DETECTED ERROR IN APPLICATION: can't call void XXX on instance of java.lang.Class <XXX>解决方案
- Java错误:No enclosing instance of type MyClass is accessible.
- getClass\instanceof区别
- java axis调用cxf 的坑object is not an instance of declaring class while invoking public
- JAVA Class vs Object vs Instance
- JNI DETECTED ERROR IN APPLICATION: can't call void XXX on instance of java.lang.Class <XXX>解决方案
- Purpose of Instance Methods vs. Class Methods in Objective-C