关于equals算法的疑惑

a654244035 2018-04-26 10:17:08


//java.lang包下 StringUTF16类下的 equals算法
@HotSpotIntrinsicCandidate
public static boolean equals(byte[] value, byte[] other) {
if (value.length == other.length) {
int len = value.length >> 1;//此段代码是什么意思
for (int i = 0; i < len; i++) {
if (getChar(value, i) != getChar(other, i)) {
return false;
}
}
return true;
}
return false;
}
...全文
931 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
a654244035 2018-05-09
  • 打赏
  • 举报
回复
非常感谢,我理解了。由于我表达的失误,让大家产生了误解,不好意思~~
引用 10 楼 qq_24947841 的回复:
比较value和other内的所有char是否相等从而判断整体是否相等,char占两个字节,所有len 为Byte的len/2
引用 8 楼 a1213467 的回复:
一个utf16字符占两个byte 所以除2
a654244035 2018-05-09
  • 打赏
  • 举报
回复
我用的是eclipse。版本是Oxygen.3 Release (4.7.3)。这个没关系把
引用 9 楼 hbhbhbhbhb1021 的回复:
这个有道理啊,问题是楼主的10的版本,用的什么IDE或者工具反编译的啊,我这里的IDE版本低,Down下来之后安装上去,选不出这个版本 [quote=引用 8 楼 a1213467 的回复:] 一个utf16字符占两个byte 所以除2
[/quote]
小灰狼 2018-04-27
  • 打赏
  • 举报
回复
引用 7 楼 a654244035 的回复:
不好意思我没有表达清楚,我知道是右移。。。只是不知道它为什么使用右移。 @3楼,我是用的java se 10
整数右移相当于除以2,并且丢弃余数 至于为什么用移位而不直接写除,据说用移位运算会比除法运算更快,另外也可以用来装逼
a1213467 2018-04-26
  • 打赏
  • 举报
回复
一个utf16字符占两个byte 所以除2
a654244035 2018-04-26
  • 打赏
  • 举报
回复
不好意思我没有表达清楚,我知道是右移。。。只是不知道它为什么使用右移。 @3楼,我是用的java se 10
肥的圆不愣瞪 2018-04-26
  • 打赏
  • 举报
回复
位移运算 除2 包括 << << >>>
suxiao_mo 2018-04-26
  • 打赏
  • 举报
回复
>> 有符号位移运算符,如果数字为正数时位移后在前面补0,为负数时则在位移后在前面补1 例如:int a = 5 a变成2进制是:00000000 00000000 00000000 00000101 int b = a>>1 b变成2进制是:00000000 00000000 00000000 00000010 就是把a的二进制向右移一位,多余的删掉,前面补0,所以b的值为2
qq_38814020 2018-04-26
  • 打赏
  • 举报
回复
右移预算。。。。
hbhbhbhbhb1021 2018-04-26
  • 打赏
  • 举报
回复
java.lang.StringUTF16 这个类是什么版本的JDK啊?1.8版本的String equals 不是这样的代码啊
hbhbhbhbhb1021 2018-04-26
  • 打赏
  • 举报
回复
这个看起来就明显些了

public class Tester4 {
    public static void main(String[] args){
        int a=15;//1111
        System.out.println(a>>1);//0111
        int b=4;//0100
        System.out.println(b>>1);//0010

    }
}

hbhbhbhbhb1021 2018-04-26
  • 打赏
  • 举报
回复
右移运算符,相当于除以2
考拉一枚 2018-04-26
  • 打赏
  • 举报
回复
比较value和other内的所有char是否相等从而判断整体是否相等,char占两个字节,所有len 为Byte的len/2
hbhbhbhbhb1021 2018-04-26
  • 打赏
  • 举报
回复
这个有道理啊,问题是楼主的10的版本,用的什么IDE或者工具反编译的啊,我这里的IDE版本低,Down下来之后安装上去,选不出这个版本
引用 8 楼 a1213467 的回复:
一个utf16字符占两个byte 所以除2

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧