Java equals()与==的不同 与重写 (包含String类的特点)

equals()与==的区别

equals():比较两个对象是否为同一对象,也就是说两个对象是否占用同一块内存
“==”:与equals()一样,也是比较两个对象是占用同一块内存

注:equals()不能判断基本类型变量
例子:
class Test 
{
	public static void main(String[] args)
	{
		int i = 66;
		int j = 66;
		StringBuffer sb1 = new StringBuffer("abc");
		StringBuffer sb2 = new StringBuffer("abc");
		
		System.out.println(i == j);   //输出 true   因为 == 比较两变量是否为同一对象
        System.out.println(sb1 == sb2);   //输出 false
		System.out.println(sb1.equals(sb2));   //输出 false
//		System.out.println(i.equals(j));   error   因为equals()方法不能用于比较基本数据类型
	}
}

  • 不知道大家有没有感觉,或者听说String类很特别,我就一直很纳闷,这String类到底有什么特别,我怎么没什么感觉,于是我就对此进行了探究

例子:
class Test 
{
	public static void main(String[] args)
	{
		String s1 = "哈哈";
	    s1 = "abc";   //String类定义属性后会将属性存入栈中,而将值存入常量吃中,再次定义时,会再次在常量池中创建,引用便指向新的对象
		String s2 = "abc";
		System.out.println(s1 == s2);   //true
		System.out.println(s1.equals(s2));   //true
		
		String s3 = new String("abc");
		String s4 = new String("abc");
		System.out.println(s3 == s4);   //false
		System.out.println(s3.equals(s4));   //true 
		
		System.out.println(s1 == s3);   //false 
		System.out.println(s1.equals(s3));   //true 
	}
}
对此得出如下结论:
  1. String变量不能被重写:并不意味着 对象值 不能被改写,而是说在常量池池中重新开辟了一块空间去存储新的字符串常量
  2. equals()的不同:大家看了上面的代码及输出值后肯定会有疑问,不是说equals和==是一样的吗?不应该都是比较是否为同一对象吗?所以这就要说明:String类对equals方法进行了重写,比较的是字符是否一样(StingBuffer并未对equals进行重写)

  • 在我们自定义的类中,都是继承了Object这个类的,说以说equals()方法并没有被重写,而有时候我们需要用到比较值是否相等,那么该怎么办呢?

例子:
class T
{
	int i;
	
	public T (int i)
	{
		this.i = i;
	}
	
	public boolean equals(Object obj)
	{
		T t = (T)obj;   //因为Object是父类,而父类不能访问子类特有的属性和方法,但在将子类引用赋给父类后(t2=obj),再进行强制转话即可
		
		if (this.i == t.i)
			return true;
		else 
			return false;
	}
}
class Test 
{
	public static void main(String[] args)
	{
		T t1 = new T(123);
		T t2 = new T(123);
		
		System.out.println(t1.equals(t2));   //输出 true
	}
}

  • 以上就是这次的全部内容,喜欢请点关注?.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值