首页 > 编程 > Java > 正文

Java中的equals

2019-11-08 02:42:08
字体:
来源:转载
供稿:网友

今天面试, 被问到一题, equals和==的区别, 但是题目没有说a==b, a和b都是String.

所以我就自己想了一下, 为什么就只有String会有这种问题. PS: 这是java的一个无聊的思想, Java完全可以重写==,让String a==String b.

当时我的思路, a==b, String里就是这两个对象是否指向同一个内存地址. a==b可以转换为a.tostring==b.tostring. 而tostring里有hashcode,也就是, 本质是对比hashcode.

源码

public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); }

和我猜想的差不多, 我漏了”getClass().getName() + “@” + “

而equals呢, 我就在想,String里的,是对比字符串, 这么细化, 也就是它覆盖了equals, 而不是tostring, 因为tostring 被覆盖, 那么==也会成立

Object

public boolean equals(Object obj) { return (this == obj); }

String

public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String)anObject; int n = value.length; if (n == anotherString.value.length) { char v1[] = value; char v2[] = anotherString.value; int i = 0; while (n-- != 0) { if (v1[i] != v2[i]) return false; i++; } return true; } } return false; }

…出题人, 真的闲得蛋* .. 听内核恐慌的主持人在吐槽.. 原来Java真很蛋*


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表