instanceof
instanceof 是 Java 的一个二元操作符,类似于 ==.
测试它 左边的对象 是否是它 右边的类 的实例,返回 boolean 的数据类型
if (o instanceof Vector)
System.out.println("对象是 java.util.Vector 类的实例");
else if (o instanceof ArrayList)
System.out.println("对象是 java.util.ArrayList 类的实例");
equals , ==
==
1.基本数据类型:char int byte 等用 直接比较值
2.对象用的时候 比较地址,即是否是同一个对象
equals
1.是object类的方法, 可能在其他子类中被覆写, (String, Integer等) 由此可知对象才有 equals方法,int,byte,char这样的基本数据类型无.
2.看源码 可知obejct类中相当于==,(比较地址)
但在其他类中很可能覆写了,只比较值 String Integer都是
object
public boolean equals(Object obj) {
return (this == obj);
}
Integer
private final int value;
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
public int intValue() {
return value; }
String
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String aString = (String)anObject;
if (!COMPACT_STRINGS || this.coder == aString.coder) {
return StringLatin1.equals(value, aString.value);
}
}
return false;
}
// StringLatin1.equals(value, aString.value)
public static boolean equals(byte[] value, byte[] other) {
if (value.length == other.length) {
for (int i = 0; i < value.length; i++) {
if (value[i] != other[i]) {
return false;
}
}
return true;
}
return false;
}
总结
- int char等基本数据类型只能比较值,用 ==
- String Integer等需要new的对象,
(对于这两是如此,对于其他看源码,可能equals相当于 ==)
个人理解::: 因为 ==已经可以比较地址了,所以 补充equals用来比较值…
比较是否是同一对象是用 ==
只比较值时用 equals