A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马新乐 黑马帝   /  2011-12-26 02:51  /  3126 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 马新乐 于 2011-12-27 23:18 编辑

String类复写了obj类中的elquals方法,可是怎样去比较呢?

评分

参与人数 1技术分 +1 收起 理由
杨玉揆 + 1

查看全部评分

12 个回复

倒序浏览
String重写了object中的equals方法,object默认比较的是==,也就是地址值,String比较的是内容
回复 使用道具 举报


在Java中,每一个对象都有一个地址空间,在这空间保存着这个对象的值。

String的equals是对比他们的字符和字符序列是否是相同

Object对比的是引用的地址是否相同!

用下面的例子来说明。
String str1 = "aaa";
String str2 = "aaa";
String str3 = new String("aaa");
str1与str2使用的是同一地址空间,因为String使用的是对象池,对象池概念你再去百度一下。
而str3是new出来的,就相当于开辟了新的空间,地址也就跟str1,str2不一样的。
所以,下面输出的结果为:
System.out.println(str1.equals(str2));   --true,地址一样,值也一样
System.out.println(str1.equals(str3);     --true,地址不一样,但是值一样
System.out.println(str1 == str2);           --true,地址一样,值也一样
System.out.println(str1 == str3);           --false,地址不一样,值一样,还是false

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
曾运 黑马帝 2011-12-26 08:33:33
板凳
重写Object类中的equals方法遵循:

未命名.jpg (20.74 KB, 下载次数: 44)

equals

equals

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报

String重写了object中的equals方法,object默认比较的是==,也就是地址值,String比较的是内容
class StringDemo
{
public static void main(string args[])
{
string s1='abc'
//s1是一个类类型变量,'abc'是一个对象,字符串最大的

特点:一旦被初始化,就不可以被改变。

string s2=new string('abc');

system.out.println(s1==s2);            false
system.out.println(s1.equals(s2));    true
//string类复写了object类中equals方法,该方法用于判断字符串是否相同

s1和s2有什么区别?
s1在内存中有一个对象
s2在内存中有两个对象

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报

String重写了object中的equals方法,object默认比较的是==,也就是地址值,String比较的是内容
class StringDemo
{
public static void main(string args[])
{
string s1='abc'
//s1是一个类类型变量,'abc'是一个对象,字符串最大的

特点:一旦被初始化,就不可以被改变。

string s2=new string('abc');

system.out.println(s1==s2);            false
system.out.println(s1.equals(s2));    true
//string类复写了object类中equals方法,该方法用于判断字符串是否相同

s1和s2有什么区别?
s1在内存中有一个对象
s2在内存中有两个对象

回复 使用道具 举报
常兆鹏 黑马帝 2011-12-26 08:45:04
7#
Object中默认的equals方法是比较在内存中的地址值是否相同,String重写了equals方法,使其能够比较字符和字符序列是否相同,是Object中equals功能的扩展。
回复 使用道具 举报
颜宗茂 黑马帝 2011-12-26 20:47:53
8#
String的equals方法应该是先比较字符串中的字符的二进制的值吧,从第一个字符开始,如果相等再比较第二个,以此类推。
回复 使用道具 举报
刘小峰 黑马帝 2011-12-26 21:07:26
9#
String 中 的 equals比较低是俩个字符串中的内容  ,  而obj中的equals方法比较的是俩个引用的地址
回复 使用道具 举报
黄战胜 黑马帝 2011-12-27 17:48:13
10#
equals方法比较两个对象是否相等时,其实比较的是这两个对象的内存分配首地址。如果两个对象具有相同的内存首地址,那个这两个对象其实是一个。如果不同的话,就是两个。一般情况下在,只要建立了一个对象,那么,内存就会分配一个内存区域出来。理解起来很简单,对象是类的实例化,既然实例了,就是个个体,就要有空间。但是在Java设计的时候呢,为了节省内存空间。会把一些简单而又常用的对象默认只分配一次空间,比如常数,字符,字符串。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
杨玉揆 黑马帝 2011-12-27 20:44:36
11#
其实String方法还实现了Comparable这个接口,具体的话去看毕老师的视频
回复 使用道具 举报
马新乐 黑马帝 2011-12-27 23:16:26
12#
杨玉揆 发表于 2011-12-27 20:44
其实String方法还实现了Comparable这个接口,具体的话去看毕老师的视频

恩,已经看过了。知道原理了,谢谢老师给分!
回复 使用道具 举报
杨玉揆 黑马帝 2011-12-28 10:25:54
13#
马新乐 发表于 2011-12-27 23:16
恩,已经看过了。知道原理了,谢谢老师给分!

我不是老师 呵呵只是版主而已
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马