equals 与 ==

来源:互联网 发布:grub2启动ubuntu 编辑:程序博客网 时间:2024/05/16 09:52

1.==

对于基本数据类型的比较,比较两者的值。

对于引用数据类型的比较,比较的却是引用(内存地址)。

2.equals

equals是object类中的方法,他比较的是对象的引用,可以理解为值,因此对于重写了了equals方法的比较的是他们的值。

如果没有重写equals方法则比较的是对象的引用。

Student s1 = new Student("a");Student s2 = new Student("a");s3 = s2;s1 == s2;s2 == s3;s1.equals(s2);s2.equals(s3);
s1 == s2返回的是false.
s2 == s3返回的是true.
s1,s2是new出来的Student的两个对象,在栈空间中会有s1,s2两个对象引用,分别指向堆空间中的对象。当用==比较时,比的

引用,因此返回false,s2与s3是同一个对象的引用,因此返回true.

而equals比较的是对象

s1.equals(s2)如果Student类重写了equals方法,返回的为true,没有重写equals方法,返回的为false.s2.equals(s3)返回true
String str1 = "java";

String str2 = "java";

String Str3 = new String( "java");

String Str4 = new String("java");

String类型重写了equals方法,因此”equals“比较的是字符串是否一致,而”==“比较的还是字符串的引用。
但是为什么str1 == str2 返回true,因为常量池的特点。字符串常量不能重复出现,也就是说,有多个常量时,编译器先会去常量池查找该常量是否已经存在,如果不存在,则在创建一个新的字符常量,因此str1,str2指向的是常量池中同一个字符常量,str1,str2中的引用是同一个引用。
Str3.equals(Str4)返回true.对象的值一样。
Integer i1 = 2;Integer i2 = 2;System.out.println(i1 == i2);//返回trueSystem.out.println(i1.equals(i2));//返回true
BigDecimal b1= new BigDecimal(4.00);BigDecimal b2 = new BigDecimal(4.0);System.out.println(b1.equals(b2)); //返回tureSystem.out.println(b1 == b2);//返回false
包装类中BigDecimal 是个特例,由于其精度,产生的结果或有所不同


0 0