==和equals的区别

public class test {
	
	public static void main(String[] args) {
		//1.基本数据类型
		int n1 = 1;
		int n2 = 2;
		int n3 = 2;
		
		boolean result1 = (n1 == n2);
		boolean result2 = (n2 == n3);
		
		System.out.println(result1);//F
		System.out.println(result2);//T
		System.out.println("==============");
		//2.Integer类对象
		Integer i1 = new Integer(n1);
		Integer i2 = new Integer(n2);
		Integer i3 = new Integer(n3);
		
		System.out.println(i1 == i2);//F
		System.out.println(i2 == i3);//F
		System.out.println(i1.equals(i2));//F
		System.out.println(i2.equals(i3));//T
		System.out.println("==============");
		//3.Object类对象
		Dog dog1 = new Dog("米米");
		Dog dog2 = new Dog("豆豆");
		Dog dog3 = new Dog("豆豆");
		
		System.out.println(dog1 == dog2);//F
		System.out.println(dog2 == dog3);//F
		System.out.println(dog1.equals(dog2));//F
		System.out.println(dog2.equals(dog3));//F
	}
}
class Dog {	
	private String name;	
	public Dog() {}
	public Dog(String name) {
		this.name = name;
	}		
}

1. 基本数据类型比较

只能使用==进行比较
equals方法不能作用于基本数据类型的变量,equals继承Object类,比较的是 是否是同一个对象
此时的==比较的是两个变量存储的值是否相等
显然n1 != n2,n2 = n3

2.Integer类对象

封装n1,n2,n3后,形成Integer类对象i1,i2,i3

  • ==比较
    i1 != i2(i1 和 i2属于两个值不同的独立对象,(栈)内存中存放的(堆)内存地址不同)
    i2 != i3(i2 和 i3属于仅值相同的两个独立对象,也拥有不同的地址)
    因此:
    ==在比较对象时,比较的是(栈)内存中存放的(堆)内存地址是否一致

  • equals()比较

//Integer类的equals方法
public boolean equals(Object obj) {
  	if (obj instanceof Integer) {
         return value == ((Integer)obj).intValue();
    }
    return false;
}

i1 != i2
i2 == i3
由于Integer类中重写了equals方法,在传入参数后,首先判断对象是否属于Integer类
不是直接返回false
是Integer类对象,若两个对象的值相等返回true,否则false
因此:
Integer类的equals()函数在比较对象时,比较的是两个对象的值是否相等

3.Object类对象

new三个自定义Dog类对象,dog1,dog2,dog3

  • ==比较
    dog1 != dog2
    dog2 != dog3
    原因与Integer类对象比较结果相同,不同的独立对象在堆中有不同地址,因此不相等

  • equals()比较

//object类的equals方法
public boolean equals(Object obj) {
	return (this == obj);
}

dog1 != dog2
dog2 != dog3

Object类的equals()方法,比较的是引用类型的变量所指向的对象的地址
因此:
Object类的equals()方法与==的作用一致,比较的都是对象的地址,即是否是同一个对象

注意

Object类中的equals方法和==是一样的,没有区别。
而String类,Integer等类,重写了equals方法,比较方式有所改。
所以,当自己创建类时,自动继承了Object的equals方法,要想实现不同的等于比较,必须重写equals方法。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值