java 中 == 和 equals 方法的区别

1. ==:可以比较基本数据类型和引用数据类型

概述:
	既可以比较基本数据类型;
	也可以比较引用数据类型。

1. 比较基本类型,比较值的大小:
		int i = 3;
		int j = 3;
		System.out.println(i == j);
		return:true.
		
2. 比较引用类型,比较对象的引用地址:
		String str = "haha";
		String str1 = "haha";
		String str2 = new String("haha");
		System.out.println(str == str1);
		return: true.
		System.out.println(str == str2);
		return: false.
		备注:字符串缓存池中,若已有字符串,则赋值时不再创建一个新的字符串;如果是new关键字则创建一个
		     新的字符串。
		
特殊: Integer(值为-128 ~ 127)是创建对象,直接去Integer的缓存中取创建好的对象,不属于这个返回会创建新的Integer对象。
	case1:
		Integer i = 120;
		Integer i2 = 120;
		System.out.println(i == i2);
		return: true.

	case2:
		Integer i = 1234;
		Integer i2 = 1234;
		System.out.println(i == i2);
		return: false.		

2. equals: 只可以比较引用数据类型

概述:
	继承至Object对象的方法;
	所有的引用类型都能调用;
	只能比较引用数据类型。

1. 比较引用数据类型比较的是引用地址:
	People p = new People();
	People p2 = new People();
	System.out.println(p.equals(p2));
	return: false;

特殊:String类、Integer分装类重写了equals()方法,比较的是内容。
	Integer i = 10;
	Integer i2 = 10;
	System.out.println(i.equals(i2));
	return: true.

3. 源码分析

3.1 Object类下的equals()方法

public class Object {
	// equals()方法底层也是通过==做比较的
	public boolean equals(Object obj){
		return (this == obj);
	}
}

3.2 String类下的equals()方法

public final class String 
implements java.io.Serializable,Comparable<String>,CharSequence{

	public boolean equals(Object anObject) {
		// 通过==判断引用地址是否相同
		if(this == anObject){
			return true;
		}
		// 判断anObject是否为String类的一个实例
		if(anObject instanceof String){
			String anotherString = (String)anObject;
			// 获取到String类下value数组的长度
			int n = value.length;
			// 判断当前String类下value数组的长度和输入的对象的长度是否一致
			// 不一致直接返回false
			if(n == anotherString.value.length){
				char v1[] = value;
				char v2[] = anotherString.value;
				int i = 0;
				// 循环遍历,只要两个数组中有一个字符不同就返回false
				while(n-- != 0){
					if(v1[i] != v2[i])
						return false;
					i++;	
				}
			}
		}
		return false;
	}

}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值