//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;
    }

解决方案 »

  1.   

    这个看起来就明显些了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    }
    }
      

  2.   

    java.lang.StringUTF16 这个类是什么版本的JDK啊?1.8版本的String equals 不是这样的代码啊
      

  3.   

    >> 有符号位移运算符,如果数字为正数时位移后在前面补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
      

  4.   

    位移运算 除2
    包括 <<  << >>>
      

  5.   

    不好意思我没有表达清楚,我知道是右移只是不知道它为什么使用右移。
    @3楼,我是用的java se 10
      

  6.   

    一个utf16字符占两个byte
    所以除2
      

  7.   

    这个有道理啊,问题是楼主的10的版本,用的什么IDE或者工具反编译的啊,我这里的IDE版本低,Down下来之后安装上去,选不出这个版本
      

  8.   

    比较value和other内的所有char是否相等从而判断整体是否相等,char占两个字节,所有len 为Byte的len/2
      

  9.   

    我用的是eclipse。版本是Oxygen.3 Release (4.7.3)。这个没关系把