Java中equals和==的区别总结

1)对于==,如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;如果作用于引用类型的变量,则比较的是所指向的对象的地址。

2)对于equals方法,equals方法是Object的,所有继承了Object类的类都有该方法,注意:equals方法不能作用于基本数据类型的变量
祖宗类Object中的equals方法比较的是两个对象地址是否相等,即是否为同一个对象,但一些类对该方法进行了重写,如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;
诸如String、Date、基本数据类型的封装类等类对equals方法进行了重写的话,比较的是所指向的对象的内容。(至于还有没有及其他类重写了equals方法还需读者自己去发现)
代码示例:


public class Demo1 {
	public static void main(String[] args) {
		Integer a = 299;//当要赋的值在[-128~127]范围内,则会直接指向该值的引用,不用去new 个对象到堆内存中去了。因为	Integer已经缓存了数据。
		Integer b = 299;
		System.out.println("a.equals(b)  " + a.equals(b));
		System.out.println("a==b  " + (a==b));
		Integer a1 = 2;
		Integer b1 = 2;
		System.out.println("a1.equals(b1)  "+a1.equals(b1));
		System.out.println("a1==b1  " +(a1==b1));
		String str = "b";
		String c = "aaa" + str;
		String d = "aaab";
		System.out.println("c.equals(d)  " +c.equals(d));
		System.out.println("c==d  " +(c==d));
	}
}

运行结果:
a.equals(b) true
a == b false
a1.equals(b1) true
a1 == b1 true
c.equals(d) true
c == d false

如有不足还请各位大神多多指教


作者:爱捡贝壳的小男孩
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/qq_41099665/article/details/83651565