| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1508 人关注过本帖
标题:java.lang.String里的equals()方法的源码,我看不懂,求解释!!
只看楼主 加入收藏
寂寞编程孤独
Rank: 1
等 级:新手上路
帖 子:20
专家分:6
注 册:2010-10-26
结帖率:57.14%
收藏
已结贴  问题点数:5 回复次数:9 
java.lang.String里的equals()方法的源码,我看不懂,求解释!!
public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = count;
        if (n == anotherString.count) {
        char v1[] = value;
        char v2[] = anotherString.value;
        int i = offset;
        int j = anotherString.offset;
        while (n-- != 0) {
            if (v1[i++] != v2[j++])
            return false;
        }
        return true;
        }
    }
    return false;
    }
上面是源码!!
int n = count;
        if (n == anotherString.count)
count表示的是什么?
最好是从头到尾解释说明一下!!
搜索更多相关主题的帖子: false 
2011-03-03 11:02
付政委
该用户已被删除
收藏
得分:2 
提示: 作者被禁止或删除 内容自动屏蔽
2011-03-06 12:48
幸福的果冻
Rank: 2
等 级:论坛游民
帖 子:9
专家分:10
注 册:2011-3-2
收藏
得分:2 
我想  我只道 count的意思吧  你应该只道 equals()方法 是用来比较字符串是否相等吧  String s="ss";
    String a="dd";s.equals(a);count 就是a的长度了!
2011-03-06 14:22
linjx0123
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:279
专家分:1362
注 册:2006-4-7
收藏
得分:2 
equals比较的是string的内容。而没有重写的equals方法跟“==”表达式是一样的,比较的是引用。
if (this == anObject) {
        return true;
    }
是为了比较是否是同一个引用,假如是同个引用,则返回true,否则返回false。这是为了提高速度而写的判断语句。比如:
String a = new String("adfadfsdfadsfadfasdfadfdsf");
String b = a;
因为a和b是同个引用,所以不需要去判断它的内容,就知道a==b;

if (anObject instanceof String) {
这句主要是判断是否是String的实例,如果不是String的实例,那么跟String比较肯定是不相等的。

if (n == anotherString.count) {
这个是比较两个字符串的长度,也是为了提高速度而写的。

char v1[] = value;
        char v2[] = anotherString.value;
        int i = offset;
        int j = anotherString.offset;
        while (n-- != 0) {
            if (v1[i++] != v2[j++])
            return false;
        }
String的存储结构是一个char数组,也就是value,上面的程序就是循环比较数组的内容是否相等。
2011-03-06 16:07
洛云
Rank: 5Rank: 5
等 级:职业侠客
帖 子:204
专家分:356
注 册:2010-2-3
收藏
得分:0 
以下是引用付政委在2011-3-6 12:48:27的发言:

我不太懂 但是可以说点
   先问你  你知道什么时候用equals吗?
   你知道equals是做什么比较的吗?

    何必说
    String s="dd";
    String a="dd";
    要判断这两个是否相等的时候就用到equals方法了!
equals  它里面做的事情、基本就是判断堆空间里的内容是否相等!
 栈,堆,静态区   懂吗?  
貌似在国外的一本教材上看到,java在编译时地对字面量进行优化,也就是这样定义s和a的话,它们是会指向同一个地址的,也就是如果这样写的话可以用s==a来判断。而如果用s = new String("dd"); a= new String("aa");则需要用到equals方法。

QQ群:C语言初级群:31066229
   JAVA2自学交流群(筹备中):31066388
UC群:C语言学习:10051714
2011-03-23 09:55
六戒书生
Rank: 1
来 自:吉林 长春
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-3-23
收藏
得分:0 
学习了,这个函数instanceof是干什么用的?还有
能解释一下这段代码吗?  int n = count;
        if (n == anotherString.count) {
        char v1[] = value;
        char v2[] = anotherString.value;
        int i = offset;
        int j = anotherString.offset;
        while (n-- != 0) {
            if (v1[i++] != v2[j++])
            return false;
没看懂~~~

我很想想学编程,可是不得法~~~
2011-03-27 13:47
zongshi123
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:50
专家分:310
注 册:2009-9-13
收藏
得分:0 
因为有些很底层的源码是看不到怎么实现的,,估计就是看到了,也会更迷茫。。。以下是猜想

int n = count;//当前字符串的count
if (n == anotherString.count) { // 如果当前字符串的字符数 == 要比较的字符数
char v1[] = value;//当前字符串的 包含的所有 字符组成的数组 value
char v2[] = anotherString.value;//要比较的字符串的 包含的所有 字符组成的数组 value

int i = offset;// 看到下面要处理 i++ 值应该是0吧  offset:通过看jdk的API文档 可以看出就是 第一个索引的意思,那么值就是0
int j = anotherString.offset;//原理同上
while (n-- != 0) {// --在右边,先执行整个表达式,再--,,    意:第一次是 当前字符串的字符数不为0,执行循环,下次就是 减1 不为0 才执行,,以后类推
     if (v1[i++] != v2[j++])//++在右边也是先执行整个表达式,再++    意:第一次是 v1[i] 和v2[j]比较,下次是 v1[i+1]和v2[j+1]比较,,以后类推
     return false;//上面 比较某个相同位置的字符 值不等时,return false

[ 本帖最后由 zongshi123 于 2011-3-28 01:51 编辑 ]

一个没房没车没钱没权没头没脑没心没肺没脸没皮的穷鬼垃圾小流氓外带人妖大尾(yi)巴狼
2011-03-28 01:47
zongshi123
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:50
专家分:310
注 册:2009-9-13
收藏
得分:0 
。。。。。。。。。。原来可以再编辑。。这,还是编辑上面的吧

一个没房没车没钱没权没头没脑没心没肺没脸没皮的穷鬼垃圾小流氓外带人妖大尾(yi)巴狼
2011-03-28 01:50
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:0 
不懂!

   唯实惟新 至诚致志
2011-03-28 07:00
六戒书生
Rank: 1
来 自:吉林 长春
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-3-23
收藏
得分:0 
回复 6楼 六戒书生
很感谢大侠的帮助,学习了很多~~~~正在研究中...  ...
                麻烦大侠看看这个链接,也是我发的帖子,没有人知道啊~~~
                    https://bbs.bccn.net/thread-334940-1-1.html

我很想想学编程,可是不得法~~~
2011-03-29 16:50
快速回复:java.lang.String里的equals()方法的源码,我看不懂,求解释!!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018143 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved