操作符与equals方法(2)"/>
【java学习—八】==操作符与equals方法(2)
文章目录
- 1. ==操作符
- 2. equals方法
- String对象的创建
1. ==操作符
(1)基本类型比较值 : 只要两个变量的值相等,即为 true.
int a=5; if(a==6){…}
(2)引用类型比较引用 ( 是否指向同一个对象 ): 只有指向同一个对象时,==才返回 true.
Person p1 = new Person();Person p2 = new Person();System.out.println(p1 == p2);//输出:false
注意
:用“ ==” 进行比较时,符号两边的数据类型必须兼容 ( 可自动转换的基本数据类型除外 ) ,否则编译出错;
2. equals方法
equals()
:所有类都继承了 Object ,也就获得了 equals() 方法。还可以重写。
(1) 只能比较引用类型,其作用与“ ==” 相同 , 比较是否指向同一个对象。格式 :obj1.equals(obj2)
Person p1 = new Person();Person p2 = new Person();System.out.println(p1 == p2);//falseSystem.out.println(p1.equals(p2));//false
特例:
当用 equals() 方法进行比较时,对类File 、String 、Date及包装类( Wrapper Class )来说,是比较类型及内容而不考虑引用的是否是同一个对象。原因是在这些类中重写了 Object 类的 equals() 方法。
String s1 = new String("abc");String s2 = new String("abc");System.out.println(s1 == s2);//falseSystem.out.println(s1.equals(s2));//true
结论:
对于对象来说:
①特殊的类,如String、File、Data,使用==比较的是对象(对象的地址),equals比较的是内容。
②除了特殊的类之外的其他普通的类的对象,==和equals比较的都是对象(对象的内存地址)。
③如果你想改变某一个类的equals,不想用equals来比较对象的内存地址,就需要重写equals方法。
String对象的创建
(1)字面量创建String对象
String s1 = "abc"; //常量池中添加“abc”对象,返回引用地址给s1对象
String s2 = "abc"; //通过equals()方法判断常量池中已有值为abc的对象,返回相同的引用。
System.out.println(s1 == s2);//true 所以s1 == s2
(2)new创建String对象
String s3 = new String("def");//在常量池中添加“def”对象,在堆中创建值为“def”的对象s3,返回指向堆中s3的引用String s4 = new String("def");//常量池中已有值为“def”的对象,不做处理,在堆中创建值为“def”的对象s4,返回指向堆中的s4的引用
更多推荐
【java学习—八】==操作符与equals方法(2)
发布评论