24小时热门版块排行榜    

查看: 2252  |  回复: 6

hywC

新虫 (小有名气)

[求助] 求大神解释java中String中的eqials方法的源代码 已有2人参与

Sample Text
求解释java中String中的eqials方法的源代码
CODE:
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[]数组怎么可以直接赋值给他
                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;
    }

回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

virtualzx

木虫 (著名写手)

【答案】应助回帖

感谢参与,应助指数 +1
数组初始化的语法就是这样的。java会根据右边的数组长度自动确定v1和v2的长度
type a[]=初始值数组

比如
int data[] = new int[] {1,2,3,4,5,6};
就定义一个长度为6的整数数组
2楼2013-12-03 01:01:12
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

caozhengwei

银虫 (小有名气)

【答案】应助回帖

感谢参与,应助指数 +1
this == anObject 这个地方是比较两个引用指向的内存地址是不是一致 如果一致的话直接return true
接下来 anObject instanceof String是判断anObject是不是一个String类型的对象  如果不是的话直接return false 如果是的话会把两个String类型的对象的值拿出来比较  你可以看到String.java这个类里边定义了一个private final char value[];吧   明白????
3楼2013-12-03 10:10:15
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

hywC

新虫 (小有名气)

引用回帖:
2楼: Originally posted by virtualzx at 2013-12-03 01:01:12
数组初始化的语法就是这样的。java会根据右边的数组长度自动确定v1和v2的长度
type a[]=初始值数组

比如
int data[] = new int[] {1,2,3,4,5,6};
就定义一个长度为6的整数数组

CODE:
int i = offset;
                int j = anotherString.offset;

这个是什么意思
4楼2013-12-06 21:05:16
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

h2plus0

银虫 (初入文坛)

【答案】应助回帖

引用回帖:
4楼: Originally posted by hywC at 2013-12-06 21:05:16
int i = offset;
                int j = anotherString.offset;
这个是什么意思...

offset 就是内部存储数据开始的位置,(有时候可能为了优化,数据开始存储位置并不一定是0)

/** The offset is the first index of the storage that is used. */
    private final int offset;
拿破轮曾经说过:随意的让一个金币从眼前溜走就是对GM的犯罪!
5楼2013-12-07 10:12:34
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

二逼小饭饭

金虫 (小有名气)

【答案】应助回帖

int i =  offset,是自身对象的起始位置,如果没省略,应该是int i =  this.offset。String类中定义有私有的终态变量
/** The offset is the first index of the storage that is used. */
    private final int offset;
int n = count;获得字符串的长度,count是this.count的缩略
/** The count is the number of characters in the String. */
    private final int count;
最后,需要提醒楼主,String类的底层实现是char类型的数组,构造方法中传入char类型数组,作为String的字面量,如String(char[] value),String(char[] value,int offset,int count)等。
/** The value is used for character storage. */
    private final char value[];
现在能看懂这段代码了吧?
遇见木虫,与优秀的人同在
6楼2013-12-24 22:11:32
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

w无衣师尹w

新虫 (初入文坛)

【答案】应助回帖

详细说明看我加的代码注释
1)this代表调用equals方法的实例。
2)equals方法,代表两个意思,一个是完全相同的实例;另一个是内容相同的实例;
3)逐个字符比较就不赘述了。
public boolean equals(Object anObject) {//传入的对象,类似于泛型概念
        if (this == anObject) {//这段代码块表示当前实例和anObject是否引用同一地址空间,即完全相同
            return true;
        }
        if (anObject instanceof String) {//这段代码块,对anObject使用反射成String类型,对this和anObject进行每个单字符对比,若完全相等,则返回true。结合以前代码块,这处理的肯定不是同一地址空间的实例。
            String anotherString = (String)anObject;
            int n = count;
            if (n == anotherString.count) {
                char v1[] = value;                                         //这里char[]数组怎么可以直接赋值给他
                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;
    }
7楼2014-01-03 10:13:23
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 hywC 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 基金不中,共勉 +5 eulota 2026-08-26 5/250 2026-08-26 23:33 by young90
[基金申请] 看板上这么多中的,有点像50人群里49个人都是骗子的那种感觉…… +3 a089 2026-08-26 3/150 2026-08-26 23:21 by young90
[基金申请] 我不理解! +15 Edward_pc 2026-08-26 23/1150 2026-08-26 20:34 by zzuzxg
[基金申请] 2026年的国家社科基金项目通讯评审的新规则与新动向、新挑战 +7 process2012 2026-08-23 10/500 2026-08-26 19:23 by hmhminy
[基金申请] 系统查不到 +10 董八千 2026-08-26 10/500 2026-08-26 16:30 by Equinoxhua
[基金申请] 2026年8月25日国自然放榜前突然收到列入评审专家邮件,有关系吗? +25 木水思豆 2026-08-25 28/1400 2026-08-26 14:53 by draco1987
[基金申请] 能否退出参与的面上项目解除限项 +23 koalala 2026-08-24 26/1300 2026-08-26 14:29 by 宝贝虫子
[基金申请] 出来了 +9 trojank 2026-08-26 9/450 2026-08-26 14:25 by 宝贝虫子
[基金申请] 哪位高人中了,把查询到的截图贴出来让我看看,让我长长见识 +4 yuleib84 2026-08-26 5/250 2026-08-26 13:40 by yuleib84
[基金申请] 项目信息和经费信息在系统里都可以看到了 +6 wittyboy 2026-08-26 14/700 2026-08-26 10:55 by wittyboy
[基金申请] 怎么看青基中了没有啊 +4 叶九微 2026-08-26 4/200 2026-08-26 10:52 by xiacongxu
[基金申请] 牛来!米来!面来! +8 beefly 2026-08-26 8/400 2026-08-26 08:37 by xuzhipiao
[基金申请] 在坚冰还盖着北海的时候,我看到了怒放的梅花。 (金币+10) +6 ziyangfang 2026-08-25 9/450 2026-08-25 20:26 by huagongfeihu
[基金申请] 明天应该可查了!? +6 chengyan1220 2026-08-23 6/300 2026-08-25 19:45 by zfd97
[基金申请] 今日不放榜?网传国自然预计 8 月 27 日可查结果 +17 医学老男孩 2026-08-20 22/1100 2026-08-25 15:36 by 医学老男孩
[基金申请] 人气不行了 +11 fansofjerry 2026-08-21 11/550 2026-08-25 11:04 by 孤独的英雄6
[教师之家] 导师吐槽:我怎么摊上了这么个极品研究生! +3 苏东坡二世 2026-08-23 3/150 2026-08-25 10:35 by shisan1313
[基金申请] 时间戳今天,20号变了 +5 archvillain 2026-08-20 5/250 2026-08-22 06:12 by hui_daxiao
[基金申请] 应该是下周三26日公布了吧? +4 哈哈蛤? 2026-08-21 4/200 2026-08-21 10:58 by Vivilian
[基金申请] 基金啊基金 +4 longfie172 2026-08-20 4/200 2026-08-21 08:58 by mark mao
信息提示
请填处理意见