Demo
基本类型
public class ObjectDemo {
public static void main(String[] args) {
//基本类型
int a=57;
int b=67;
int c=124;
int d=124;
System.out.println(a==b);
System.out.println((a+b)==c);
System.out.println(c==d);
}
}
运行结果:
注:基本类型时,==比较的是值是否相等。
引用类型
public class ObjectDemo {
public static void main(String[] args) {
//引用类型 ==与equal的区别
String s1=new String("hello");
String s2=new String("world");
String s3=new String("helloworld");
String s4=new String("helloworld");
System.out.println(s1==s2);
System.out.println((s1+s2)==s3);
System.out.println(s3==s4);
System.out.println("-----------");
System.out.println(s1.equals(s2));
System.out.println(s3.equals(s1+s2));
System.out.println(s3.equals(s4));
}
}
运行结果:
注:引用类型:==比较的是值地址是否相等,而equals()比较的是值是否相等!
结果分析:
- ==:s1、s2、s3、s4像这种new出来的(即通过基本类的构造函数赋值的),最开始在堆中分配4个不同的内存空间,用于存放其在常量池中返回的地址,其在堆中地址自然完全不同;而s1和s2在拼接时,会先在常量池中开辟一个新空间,在进行拼接。三个比较地址都不同,所以均为false!
- equals():s1、s2、s3、s4像这种new出来的(即通过基本类的构造函数赋值的),最开始在堆中分配4个不同的内存空间,其地址自然完全不同;但是equals()比较的是类对象值是否相等。所以结果为false、true、true!
自动拆箱、int与Integer比较方法
public class ObjectDemo {
public static void main(String[] args) {
//Integer做四则运算的自动拆箱 int与Integer类型比较时比较方法
int i=57;
Integer i1=new Integer(57);
Integer i2=new Integer(67);
Integer i3=new Integer(124);
Integer i4=new Integer(124);
System.out.println(i==i1);
System.out.println(i1==i2);
System.out.println((i1+i2)==i3);
System.out.println(i3==i4);
}
}
运行结果:
注:
- 两个Integer类型对象在做四则运算时会先进行自动拆箱,将Integer拆箱成int类型数据,然后做四则运算。
- int类型与Integer对象比较时会将Integer对象自动拆箱成int类型数据,然后比较值大小,相同则返回true。
- Integer对象与Integer对象做比较时是直接比较值地址。
结果分析:由以上可知,true、false、true,false。对于第三个输出结果为true是因为,i1,i2自动拆箱做加法后类型为int,int类型与Integer对象作比较如上注2,则结果为true。
总结
- ==:
基本类型:==比较的是值得大小。
引用类型:比较的是值地址是否相同 - equals():
默认情况:即object类中equals()方法比较的是地址是否相同。
重写equals():象Integer、Double、String等类都是重写了equals()方法的,这种情况下equals()是比较的是值是否相同。
参考
自动拆箱、自动装箱见:
http://blog.youkuaiyun.com/ZhouHuoCleverset/article/details/61676472#t5
String s=new String(“hello”)与String s=”hello”的区别?即new出来与直接赋值的区别请参考:
http://blog.youkuaiyun.com/zhouhuocleverset/article/details/61935578