equals 和==

equals 和==的区别

==:默认判断的是两个对象的内存地址是否一致,很少用在判断对象,一般用在基本数据类型是否相同
在这里插入图片在这里插入图片描述
描述

equals:是默认调用object里面自带的一个方法,用来判断两个对象是否相等,String类里面重写了equals方法,比较的是字符串里内容。equals我们自己也可以重写

    public boolean equals(Object obj) {
        return (this == obj);
    }//equals源码
package Cainiao;

public class Cat {
		String name;
		String color;
		public Cat(String name ,String color) {
			this.name=name;
			this.color=color;
		}
		public static void main(String[] args) {
			Cat c1=new Cat("小喵","白色");
			Cat c2=new Cat("小喵","白色");
			System.out.println(c1==c2);
			System.out.println(c1.equals(c2));

		}

}

在这里插入图片描述
如果要人为两只猫的颜色相等的就是相等的,那么就要重写Object中的equals的方法,调用的就是子类的equals的方法

package Cainiao;

public class Cat {
		String name;
		String color;
		public Cat(String name ,String color) {
			this.name=name;
			this.color=color;
		}
//	这时写@Override会报错,所以注掉
		public boolean equals(Cat c) {
			if(this.color==c.color) {
				return true;
			}else {
				return false;
			}
		}
		public static void main(String[] args) {
			Cat c1=new Cat("小喵","白色");
			Cat c2=new Cat("小花","白色");
			System.out.println(c1==c2);
			System.out.println(c1.equals(c2));

		}

}

在这里插入图片描述

String 里也重写了equals方法

   public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String aString = (String)anObject;
            if (!COMPACT_STRINGS || this.coder == aString.coder) {
                return StringLatin1.equals(value, aString.value);
            }
        }
        return false;
    }//String类 里也重写的equals方法
package Cainiao;

public class Test {

	public static void main(String[] args) {
		String str1="小红";
		String str2="小红";//第二的小红并没有单独占用空间
		System.out.println(str1==str2);
		System.out.println(str1.equals(str2));

	}  
}

在这里插入图片描述

str1 和str2都是String类型,两个名字不同的容器,但里面都是装的都是“小红”,在方法区指向的是同一个地址,就是“小红”所在的位置

在这里插入图片描述

package Cainiao;

public class Test {

	public static void main(String[] args) {
		String str3= new String("小红");
		String str4= new String("小红");
		System.out.println(str3==str4);//判断的是地址,st3和str4指向的是堆里的两个不同的对象
		System.out.println(str3.equals(str4));//true的原因是String类里重写的equals的方法比较的是两个字符串的内容是否一致
 
	}
}

在这里插入图片描述

在这里插入图片描述

所以字符串的判断一定要用equals,否则无意义

}




[外链图片转存中...(img-KXfYEwLy-1623024043840)]



[外链图片转存中...(img-fHELXXBk-1623024043841)]

所以字符串的判断一定要用equals

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值