一、==比较
1 基本数据类型与引用数据类型(包装类)
引用数据类型会进行拆箱,然后与基本数据类型进行值比较
public class Test{
public static void main(String[] args) {
int a = 1;
Integer a0 = 1;
Integer a1 = new Integer(1);
System.out.println(a == a0);
System.out.println(a == a1);
int b = 200;
Integer b0 = 200;
Integer b1 = new Integer(200);
System.out.println(b == b0);
System.out.println(b == b1);
}
}/*
true
true
true
true*/
2 引用数据类型之间比较
比较的是地址
如果引用数据类型是直接从常量池取对象,
数值是在-128与127之间
,则视为同一对象,否则视为不同对象
Integer a = 1;
Integer a0 = 1;
System.out.println(a==a0); //true
Integer b = 200;
Integer b0 = 200;
System.out.println(b==b0); //false
如果引用数据类型是直接new的话,不管值是否相同,这时两个对象都是不相同的,因为都会各自在堆内存中开辟一块空间
Integer a1 = new Integer(1);
Integer a2 = new Integer(1);
System.out.println(a1==a2); //false
Integer b1 = new Integer(200);
Integer b2 = new Integer(200);
System.out.println(b1==b2); //false
从常量池取对象跟new出来的对象也是不同的
Integer a = 1;
Integer a1 = new Integer(1);
System.out.println(a==a1); //false
Integer b = 200;
Integer b1 = new Integer(200);
System.out.println(b==b1); //false
二、equals()比较
Object中的equals方法比较的是地址,但是Integer类已经重写了equals方法,是值比较
只要数值相同都为true
1 基本数据类型与引用数据类型(包装类)
public class Test{
public static void main(String[] args) {
int a = 1;
Integer a0 = 1;
Integer a1 = new Integer(1);
System.out.println(a0.equals(a));
System.out.println(a0.equals(a1));
System.out.println(a1.equals(a));
int b = 200;
Integer b0 = 200;
Integer b1 = new Integer(200);
System.out.println(b0.equals(b));
System.out.println(b0.equals(b1));
System.out.println(b1.equals(b));
}
}/*
true
true
true
true
true
true*/
2 引用数据类型之间比较
public class Test{
public static void main(String[] args) {
Integer a = 1;
Integer a0 = 1;
Integer a1 = new Integer(1);
Integer a2 = new Integer(1);
System.out.println(a.equals(a0));
System.out.println(a.equals(a1));
System.out.println(a1.equals(a2));
Integer b = 200;
Integer b0 = 200;
Integer b1 = new Integer(200);
Integer b2 = new Integer(200);
System.out.println(b.equals(b0));
System.out.println(b.equals(b1));
System.out.println(b1.equals(b2));
}
}/*
true
true
true
true
true
true*/