简述Java中 == equals(),Arrays.equals(a,b)的区别

首先说结论
  1. 在String类型中,==是比较地址,即“即使内容相同,地址不同会输出false。”
  2. 在在String类型中,equals()比较的是对象,即“只要内容相同,输出true。”
  3. 在数组类型中,equals()的作用等同于“==”,即“比较的是地址”
  4. 在数组类型中,只比较内容相同,应用数组中的Arrays.equals(a,b) 方法。换句话说,只要两个数组元素的顺序和内容都相同,则输出true。

个人认为这是因为在Java中,String本身是继承了Object父类,并将equals()方法进行重写,使得equals()方法只比较数值而非地址。(可以查看源代码)
然而,在重写之前,在Object中equals()本身的作用和“==”相同。在Array类中,未对equals重写,因此是直接继承了Object类的方法,因此在Array中,equals的方法和 = = 方法相同,都是比较地址。
——2023.5.30

原因

有一种说法是“数组不实现equals,它将方法移交给object……”
不过我认为这并没有解释清楚,即使交给了object,一样是比较对象啊,跟地址有啥关系。就算是string类型数据也是要交给object去实现equals()方法的。
参考链接

另一个说法

即“== 比较内存地址是否相同,equals 是针对引用数据类型的方法,取出内存地址中的值比较是否相同。”

Java中的八大基本类型

1.整型

1.1 字节型(byte

1.2 短整型(short

1.3 整型(int) (默认)

1.4 长整型(long

2.浮点型

2.1 单精度浮点型(float

2.2 双精度浮点型(double)(默认)

3.字符型

3.1 字符型(char

4.布尔型

4.1 布尔类型(boolean
    
引用类型:

1.类(class

2.接口(interface

3.数组([]

因此对于引用数据类型——数组,有一个专门的方法—— ** Arrays.equals(a,b) ** 对数组进行顺序、内容的比较,该方法不比较内存地址,只要顺序、内容相同,则输出ture。

问题起因

只是关注结论的不必往下看了,这部分是给自己记录的。
碰到了这样一道算法题:需要对两个字符串进行字母异位词判定。解题思路为:先对两个字符串进行排序,然后再将比较两个字符串的内容,若相等,则输出true。

String s =“anagram”;
String t =“nagaram”;

class Solution {
    public static boolean isAnagram(String s, String t) {
    	char[] ch1,ch2;
    	boolean bo;
    	if (s.length()!=t.length()) {
			return false;
		}
    	ch1 = s.toCharArray();
    	ch2 = t.toCharArray();
    	Arrays.sort(ch1);
    	Arrays.sort(ch2);
    	//这里我最开始是用ch1.equals(ch2);输出false
    	//因为用该方法则比较的是地址
    	return bo= Arrays.equals(ch1,ch2)?true:false;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值