在比较基本数据类型时是值进行比较
public class Test {
public static void main(String[] args) {
// java中有八种基本数据类型:byte short int long float double true false
int a = 100;
int b = 100;
boolean result = a == b;// true
}
}
在比较自定义的引用数据类型时,是栈内存地址进行比较
package test;
public class Test {
public static void main(String[] args) {
Cat c = new Cat("小奥");
Cat c1 = new Cat("小黑");
boolean result1 = c == c1;// false
boolean result2 = c.equals(c1);// false 因为在没重写equals方法时调用的是父类Object中的equals方法进行比较,比较的是地址
}
}
class Cat {
String name;
public Cat(String name) {
super();
this.name = name;
}
}
在重写自定义的情况下
public class Test {
public static void main(String[] args) {
Cat c = new Cat("小奥");
Cat c1 = new Cat("小黑");
boolean result1 = c == c1;// false
boolean result2 = c.equals(c1);// true
}
}
class Cat {
String name;
public Cat(String name) {
super();
this.name = name;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Cat other = (Cat) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
}
字符串进行比较
package test;
public class Test {
public static void main(String[] args) {
String s1 = "1";
String s2 = "1";
boolean result1 = s1 == s2;// true 因为String是final修饰的不可变的
boolean result2 = s1.equals(s2);// true 因为String类中重写了equals方法
String s3 = new String("1");
String s4 = new String("1");
boolean result3 = s3 == s4;// false 因为每次new都会在堆中创建一个对象,因此栈内存地址不同
boolean result4 = s3.equals(s4);// true 因为String类中重写了equals方法
}
}
封装类进行比较
package test;
public class Test {
public static void main(String[] args) {
Integer num1 = new Integer(12);
Integer num2 = new Integer(12);
boolean result1 = num1 == num2;// true 因为Integer类中有缓存机制,大小是-128-127之间
boolean result2 = num1.equals(num2);// true //因为Integer中重写了equals方法
Integer num3 = new Integer(1000);
Integer num4 = new Integer(1000);
boolean result3 = num1 == num2;// false
boolean result4 = num1.equals(num2);// true
}
}
其他:集合类中的contains()方法在比较对象时,底层调用的是equals方法进行判断对象是否存在