值大小相同的Integer和Long为什么hashCode值一样

关于Interger和Long的hashCode方法源码

    /**
     * Returns a hash code for this <code>Integer</code>.
     *
     * @return  a hash code value for this object, equal to the 
     *          primitive <code>int</code> value represented by this 
     *          <code>Integer</code> object. 
     */
    public int hashCode() {
	return value;
    }
    /**
     * Returns a hash code for a {@code long} value; compatible with
     * {@code Long.hashCode()}.
     *
     * @param value the value to hash
     * @return a hash code value for a {@code long} value.
     * @since 1.8
     */
    public static int hashCode(long value) {
        return (int)(value ^ (value >>> 32));
    }

位运算:

无符号右移运算符:

右移运算分为两种,分别是带符号右移和无符号右移。现在再来讲解无符号右移。无符号右移运算符的写法是”>>>”,比带符号右移多了一个”>”。带符号右移的运算规则与无符号右移的运算规则差别就在于:无符号右移在二进制串移动之后,空位由0来补充,与符号位是0还是1毫无关系,如下图:

以上图片展示了无符号右移的运算规则。对于正数而言,无符号右移和带符号右移没有什么区别,而对于负数而言,经过无符号右移会产生一个正数,因为最左边的符号位被0填充了。

异或运算:

按位异或运算符写法是”^”,它的运算规则如下图:

如上图,运算规则为:两个二进制位上的数字如果相同,则运算结果为0,如果两个二进制位上的数字不相同,则运算结果为1。下面我们还是用5和6为例来讲解一下异或的运算过程,如下图:

首先还是把这两个数字转换成补码形式,之后把相应的二进制位上的数字进行异或运算,如果对应的两个二进制位上的数相同,计算结果为0,否则计算结果为1。按照这个规则把每一位上的数字都计算一遍后,得到二进制的运算结果是11,这个运算结果转换为十进制数是3。

参考文章:https://blog.csdn.net/shalimu/article/details/104308769

了解完成两个运算符之后,再来看看hashCode值,上代码:

package com.springboot.test;

import java.util.LinkedList;

public class LongTest {
    public static void main(String[] args) {

        int num = 33;
        String s = getBinary(num);
        System.out.println("初始值: " + s + "  value: " + num);
        for (int i = 1;i<100; i++) {
            int newNum = num >>> i;
            System.out.println("i的值: "+ i + " 二进制:" + getBinary(newNum) + "  value: " + newNum);
        }
    }

    /**
     * 讲10 进制转化为二进制
     * @param num :待转换的十进制
     * @return   :转换后的二进制(string)
     */
    public static String getBinary(int num) {
        int currentNum = num;//存放当前的被除数
        LinkedList<String> list = new LinkedList<String>();//存放余数,也是就二进制数

        while (currentNum != 0) {
            if (currentNum % 2 == 0) {
                list.addFirst("0");
            } else {
                list.addFirst("1");
            }
            currentNum /= 2;
        }

        StringBuilder sb = new StringBuilder();//当然你可以使用其他形式作为方法的返回
        for (int i = 0; i < list.size(); i++) {
            sb.append(list.get(i));
        }
        return sb.toString();
    }

}

查看输出结果:

E:\setup\jdk\jdk\bin\java.exe -javaagent:E:\setup\idea\ideaSetup\lib\idea_rt.jar=56098:E:\setup\idea\ideaSetup\bin -Dfile.encoding=UTF-8 -classpath E:\setup\jdk\jdk\jre\lib\charsets.jar;E:\setup\jdk\jdk\jre\lib\deploy.jar;E:\setup\jdk\jdk\jre\lib\ext\access-bridge-64.jar;E:\setup\jdk\jdk\jre\lib\ext\cldrdata.jar;E:\setup\jdk\jdk\jre\lib\ext\dnsns.jar;E:\setup\jdk\jdk\jre\lib\ext\jaccess.jar;E:\setup\jdk\jdk\jre\lib\ext\jfxrt.jar;E:\setup\jdk\jdk\jre\lib\ext\localedata.jar;E:\setup\jdk\jdk\jre\lib\ext\nashorn.jar;E:\setup\jdk\jdk\jre\lib\ext\sunec.jar;E:\setup\jdk\jdk\jre\lib\ext\sunjce_provider.jar;E:\setup\jdk\jdk\jre\lib\ext\sunmscapi.jar;E:\setup\jdk\jdk\jre\lib\ext\sunpkcs11.jar;E:\setup\jdk\jdk\jre\lib\ext\zipfs.jar;E:\setup\jdk\jdk\jre\lib\javaws.jar;E:\setup\jdk\jdk\jre\lib\jce.jar;E:\setup\jdk\jdk\jre\lib\jfr.jar;E:\setup\jdk\jdk\jre\lib\jfxswt.jar;E:\setup\jdk\jdk\jre\lib\jsse.jar;E:\setup\jdk\jdk\jre\lib\management-agent.jar;E:\setup\jdk\jdk\jre\lib\plugin.jar;E:\setup\jdk\jdk\jre\lib\resources.jar;E:\setup\jdk\jdk\jre\lib\rt.jar;E:\code\test\target\test-classes;E:\code\test\target\classes;E:\setup\maven\maven_repo\org\springframework\boot\spring-boot-starter-aop\2.3.3.RELEASE\spring-boot-starter-aop-2.3.3.RELEASE.jar;E:\setup\maven\maven_repo\org\springframework\boot\spring-boot-starter\2.3.3.RELEASE\spring-boot-starter-2.3.3.RELEASE.jar;E:\setup\maven\maven_repo\org\springframework\boot\spring-boot-starter-logging\2.3.3.RELEASE\spring-boot-starter-logging-2.3.3.RELEASE.jar;E:\setup\maven\maven_repo\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;E:\setup\maven\maven_repo\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;E:\setup\maven\maven_repo\org\apache\logging\log4j\log4j-to-slf4j\2.13.3\log4j-to-slf4j-2.13.3.jar;E:\setup\maven\maven_repo\org\apache\logging\log4j\log4j-api\2.13.3\log4j-api-2.13.3.jar;E:\setup\maven\maven_repo\org\slf4j\jul-to-slf4j\1.7.30\jul-to-slf4j-1.7.30.jar;E:\setup\maven\maven_repo\jakarta\annotation\jakarta.annotation-api\1.3.5\jakarta.annotation-api-1.3.5.jar;E:\setup\maven\maven_repo\org\yaml\snakeyaml\1.26\snakeyaml-1.26.jar;E:\setup\maven\maven_repo\org\springframework\spring-aop\5.2.8.RELEASE\spring-aop-5.2.8.RELEASE.jar;E:\setup\maven\maven_repo\org\springframework\spring-beans\5.2.8.RELEASE\spring-beans-5.2.8.RELEASE.jar;E:\setup\maven\maven_repo\org\aspectj\aspectjweaver\1.9.6\aspectjweaver-1.9.6.jar;E:\setup\maven\maven_repo\org\springframework\boot\spring-boot-starter-batch\2.3.3.RELEASE\spring-boot-starter-batch-2.3.3.RELEASE.jar;E:\setup\maven\maven_repo\org\springframework\boot\spring-boot-starter-jdbc\2.3.3.RELEASE\spring-boot-starter-jdbc-2.3.3.RELEASE.jar;E:\setup\maven\maven_repo\com\zaxxer\HikariCP\3.4.5\HikariCP-3.4.5.jar;E:\setup\maven\maven_repo\org\springframework\batch\spring-batch-core\4.2.4.RELEASE\spring-batch-core-4.2.4.RELEASE.jar;E:\setup\maven\maven_repo\io\micrometer\micrometer-core\1.5.4\micrometer-core-1.5.4.jar;E:\setup\maven\maven_repo\org\hdrhistogram\HdrHistogram\2.1.12\HdrHistogram-2.1.12.jar;E:\setup\maven\maven_repo\org\latencyutils\LatencyUtils\2.0.3\LatencyUtils-2.0.3.jar;E:\setup\maven\maven_repo\javax\batch\javax.batch-api\1.0\javax.batch-api-1.0.jar;E:\setup\maven\maven_repo\org\codehaus\jettison\jettison\1.2\jettison-1.2.jar;E:\setup\maven\maven_repo\org\springframework\batch\spring-batch-infrastructure\4.2.4.RELEASE\spring-batch-infrastructure-4.2.4.RELEASE.jar;E:\setup\maven\maven_repo\org\springframework\retry\spring-retry\1.2.5.RELEASE\spring-retry-1.2.5.RELEASE.jar;E:\setup\maven\maven_repo\org\springframework\spring-context\5.2.8.RELEASE\spring-context-5.2.8.RELEASE.jar;E:\setup\maven\maven_repo\org\springframework\spring-tx\5.2.8.RELEASE\spring-tx-5.2.8.RELEASE.jar;E:\setup\maven\maven_repo\org\springframework\boot\spring-boot-starter-data-redis\2.3.3.RELEASE\spring-boot-starter-data-redis-2.3.3.RELEASE.jar;E:\setup\maven\maven_repo\org\springframework\data\spring-data-redis\2.3.3.RELEASE\spring-data-redis-2.3.3.RELEASE.jar;E:\setup\maven\maven_repo\org\springframework\data\spring-data-keyvalue\2.3.3.RELEASE\spring-data-keyvalue-2.3.3.RELEASE.jar;E:\setup\maven\maven_repo\org\springframework\data\spring-data-commons\2.3.3.RELEASE\spring-data-commons-2.3.3.RELEASE.jar;E:\setup\maven\maven_repo\org\springframework\spring-oxm\5.2.8.RELEASE\spring-oxm-5.2.8.RELEASE.jar;E:\setup\maven\maven_repo\org\springframework\spring-context-support\5.2.8.RELEASE\spring-context-support-5.2.8.RELEASE.jar;E:\setup\maven\maven_repo\io\lettuce\lettuce-core\5.3.3.RELEASE\lettuce-core-5.3.3.RELEASE.jar;E:\setup\maven\maven_repo\org\springframework\boot\spring-boot-starter-web\2.3.3.RELEASE\spring-boot-starter-web-2.3.3.RELEASE.jar;E:\setup\maven\maven_repo\org\springframework\boot\spring-boot-starter-json\2.3.3.RELEASE\spring-boot-starter-json-2.3.3.RELEASE.jar;E:\setup\maven\maven_repo\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.11.2\jackson-datatype-jdk8-2.11.2.jar;E:\setup\maven\maven_repo\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.11.2\jackson-datatype-jsr310-2.11.2.jar;E:\setup\maven\maven_repo\com\fasterxml\jackson\module\jackson-module-parameter-names\2.11.2\jackson-module-parameter-names-2.11.2.jar;E:\setup\maven\maven_repo\org\springframework\boot\spring-boot-starter-tomcat\2.3.3.RELEASE\spring-boot-starter-tomcat-2.3.3.RELEASE.jar;E:\setup\maven\maven_repo\org\apache\tomcat\embed\tomcat-embed-core\9.0.37\tomcat-embed-core-9.0.37.jar;E:\setup\maven\maven_repo\org\glassfish\jakarta.el\3.0.3\jakarta.el-3.0.3.jar;E:\setup\maven\maven_repo\org\apache\tomcat\embed\tomcat-embed-websocket\9.0.37\tomcat-embed-websocket-9.0.37.jar;E:\setup\maven\maven_repo\org\springframework\spring-web\5.2.8.RELEASE\spring-web-5.2.8.RELEASE.jar;E:\setup\maven\maven_repo\org\springframework\spring-webmvc\5.2.8.RELEASE\spring-webmvc-5.2.8.RELEASE.jar;E:\setup\maven\maven_repo\org\springframework\spring-expression\5.2.8.RELEASE\spring-expression-5.2.8.RELEASE.jar;E:\setup\maven\maven_repo\org\springframework\boot\spring-boot-devtools\2.3.3.RELEASE\spring-boot-devtools-2.3.3.RELEASE.jar;E:\setup\maven\maven_repo\org\springframework\boot\spring-boot\2.3.3.RELEASE\spring-boot-2.3.3.RELEASE.jar;E:\setup\maven\maven_repo\org\springframework\boot\spring-boot-autoconfigure\2.3.3.RELEASE\spring-boot-autoconfigure-2.3.3.RELEASE.jar;E:\setup\maven\maven_repo\mysql\mysql-connector-java\8.0.21\mysql-connector-java-8.0.21.jar;E:\setup\maven\maven_repo\com\alibaba\druid-spring-boot-starter\1.1.9\druid-spring-boot-starter-1.1.9.jar;E:\setup\maven\maven_repo\com\alibaba\druid\1.1.9\druid-1.1.9.jar;E:\setup\maven\maven_repo\org\slf4j\slf4j-api\1.7.30\slf4j-api-1.7.30.jar;E:\setup\maven\maven_repo\org\projectlombok\lombok\1.18.12\lombok-1.18.12.jar;E:\setup\maven\maven_repo\org\springframework\boot\spring-boot-starter-test\2.3.3.RELEASE\spring-boot-starter-test-2.3.3.RELEASE.jar;E:\setup\maven\maven_repo\org\springframework\boot\spring-boot-test-autoconfigure\2.3.3.RELEASE\spring-boot-test-autoconfigure-2.3.3.RELEASE.jar;E:\setup\maven\maven_repo\com\jayway\jsonpath\json-path\2.4.0\json-path-2.4.0.jar;E:\setup\maven\maven_repo\net\minidev\json-smart\2.3\json-smart-2.3.jar;E:\setup\maven\maven_repo\net\minidev\accessors-smart\1.2\accessors-smart-1.2.jar;E:\setup\maven\maven_repo\org\ow2\asm\asm\5.0.4\asm-5.0.4.jar;E:\setup\maven\maven_repo\jakarta\xml\bind\jakarta.xml.bind-api\2.3.3\jakarta.xml.bind-api-2.3.3.jar;E:\setup\maven\maven_repo\jakarta\activation\jakarta.activation-api\1.2.2\jakarta.activation-api-1.2.2.jar;E:\setup\maven\maven_repo\org\assertj\assertj-core\3.16.1\assertj-core-3.16.1.jar;E:\setup\maven\maven_repo\org\hamcrest\hamcrest\2.2\hamcrest-2.2.jar;E:\setup\maven\maven_repo\org\junit\jupiter\junit-jupiter\5.6.2\junit-jupiter-5.6.2.jar;E:\setup\maven\maven_repo\org\junit\jupiter\junit-jupiter-api\5.6.2\junit-jupiter-api-5.6.2.jar;E:\setup\maven\maven_repo\org\apiguardian\apiguardian-api\1.1.0\apiguardian-api-1.1.0.jar;E:\setup\maven\maven_repo\org\opentest4j\opentest4j\1.2.0\opentest4j-1.2.0.jar;E:\setup\maven\maven_repo\org\junit\platform\junit-platform-commons\1.6.2\junit-platform-commons-1.6.2.jar;E:\setup\maven\maven_repo\org\junit\jupiter\junit-jupiter-params\5.6.2\junit-jupiter-params-5.6.2.jar;E:\setup\maven\maven_repo\org\junit\jupiter\junit-jupiter-engine\5.6.2\junit-jupiter-engine-5.6.2.jar;E:\setup\maven\maven_repo\org\junit\platform\junit-platform-engine\1.6.2\junit-platform-engine-1.6.2.jar;E:\setup\maven\maven_repo\org\mockito\mockito-core\3.3.3\mockito-core-3.3.3.jar;E:\setup\maven\maven_repo\net\bytebuddy\byte-buddy-agent\1.10.14\byte-buddy-agent-1.10.14.jar;E:\setup\maven\maven_repo\org\objenesis\objenesis\2.6\objenesis-2.6.jar;E:\setup\maven\maven_repo\org\mockito\mockito-junit-jupiter\3.3.3\mockito-junit-jupiter-3.3.3.jar;E:\setup\maven\maven_repo\org\skyscreamer\jsonassert\1.5.0\jsonassert-1.5.0.jar;E:\setup\maven\maven_repo\com\vaadin\external\google\android-json\0.0.20131108.vaadin1\android-json-0.0.20131108.vaadin1.jar;E:\setup\maven\maven_repo\org\springframework\spring-core\5.2.8.RELEASE\spring-core-5.2.8.RELEASE.jar;E:\setup\maven\maven_repo\org\springframework\spring-jcl\5.2.8.RELEASE\spring-jcl-5.2.8.RELEASE.jar;E:\setup\maven\maven_repo\org\xmlunit\xmlunit-core\2.7.0\xmlunit-core-2.7.0.jar;E:\setup\maven\maven_repo\org\springframework\batch\spring-batch-test\4.2.4.RELEASE\spring-batch-test-4.2.4.RELEASE.jar;E:\setup\maven\maven_repo\org\springframework\spring-jdbc\5.2.8.RELEASE\spring-jdbc-5.2.8.RELEASE.jar;E:\setup\maven\maven_repo\junit\junit\4.12\junit-4.12.jar;E:\setup\maven\maven_repo\org\hamcrest\hamcrest-core\2.2\hamcrest-core-2.2.jar;E:\setup\maven\maven_repo\org\springframework\spring-test\5.2.1.RELEASE\spring-test-5.2.1.RELEASE.jar;E:\setup\maven\maven_repo\org\springframework\boot\spring-boot-test\2.2.1.RELEASE\spring-boot-test-2.2.1.RELEASE.jar;E:\setup\maven\maven_repo\org\mybatis\spring\boot\mybatis-spring-boot-starter\1.3.0\mybatis-spring-boot-starter-1.3.0.jar;E:\setup\maven\maven_repo\org\mybatis\spring\boot\mybatis-spring-boot-autoconfigure\1.3.0\mybatis-spring-boot-autoconfigure-1.3.0.jar;E:\setup\maven\maven_repo\org\mybatis\mybatis\3.4.4\mybatis-3.4.4.jar;E:\setup\maven\maven_repo\org\mybatis\mybatis-spring\1.3.1\mybatis-spring-1.3.1.jar;E:\setup\maven\maven_repo\io\springfox\springfox-swagger2\2.5.0\springfox-swagger2-2.5.0.jar;E:\setup\maven\maven_repo\io\swagger\swagger-annotations\1.5.9\swagger-annotations-1.5.9.jar;E:\setup\maven\maven_repo\io\swagger\swagger-models\1.5.9\swagger-models-1.5.9.jar;E:\setup\maven\maven_repo\com\fasterxml\jackson\core\jackson-annotations\2.11.2\jackson-annotations-2.11.2.jar;E:\setup\maven\maven_repo\io\springfox\springfox-spi\2.5.0\springfox-spi-2.5.0.jar;E:\setup\maven\maven_repo\io\springfox\springfox-core\2.5.0\springfox-core-2.5.0.jar;E:\setup\maven\maven_repo\io\springfox\springfox-schema\2.5.0\springfox-schema-2.5.0.jar;E:\setup\maven\maven_repo\io\springfox\springfox-swagger-common\2.5.0\springfox-swagger-common-2.5.0.jar;E:\setup\maven\maven_repo\io\springfox\springfox-spring-web\2.5.0\springfox-spring-web-2.5.0.jar;E:\setup\maven\maven_repo\com\google\guava\guava\18.0\guava-18.0.jar;E:\setup\maven\maven_repo\com\fasterxml\classmate\1.5.1\classmate-1.5.1.jar;E:\setup\maven\maven_repo\org\springframework\plugin\spring-plugin-core\1.2.0.RELEASE\spring-plugin-core-1.2.0.RELEASE.jar;E:\setup\maven\maven_repo\org\springframework\plugin\spring-plugin-metadata\1.2.0.RELEASE\spring-plugin-metadata-1.2.0.RELEASE.jar;E:\setup\maven\maven_repo\org\mapstruct\mapstruct\1.0.0.Final\mapstruct-1.0.0.Final.jar;E:\setup\maven\maven_repo\io\springfox\springfox-swagger-ui\2.5.0\springfox-swagger-ui-2.5.0.jar;E:\setup\maven\maven_repo\com\github\pagehelper\pagehelper-spring-boot-starter\1.2.5\pagehelper-spring-boot-starter-1.2.5.jar;E:\setup\maven\maven_repo\com\github\pagehelper\pagehelper-spring-boot-autoconfigure\1.2.5\pagehelper-spring-boot-autoconfigure-1.2.5.jar;E:\setup\maven\maven_repo\com\alibaba\fastjson\1.2.66\fastjson-1.2.66.jar;E:\setup\maven\maven_repo\com\github\pagehelper\pagehelper\5.1.11\pagehelper-5.1.11.jar;E:\setup\maven\maven_repo\com\github\jsqlparser\jsqlparser\3.1\jsqlparser-3.1.jar;E:\setup\maven\maven_repo\redis\clients\jedis\2.9.0\jedis-2.9.0.jar;E:\setup\maven\maven_repo\org\apache\commons\commons-pool2\2.8.1\commons-pool2-2.8.1.jar;E:\setup\maven\maven_repo\org\redisson\redisson\3.6.5\redisson-3.6.5.jar;E:\setup\maven\maven_repo\io\netty\netty-common\4.1.51.Final\netty-common-4.1.51.Final.jar;E:\setup\maven\maven_repo\io\netty\netty-codec\4.1.51.Final\netty-codec-4.1.51.Final.jar;E:\setup\maven\maven_repo\io\netty\netty-buffer\4.1.51.Final\netty-buffer-4.1.51.Final.jar;E:\setup\maven\maven_repo\io\netty\netty-transport\4.1.51.Final\netty-transport-4.1.51.Final.jar;E:\setup\maven\maven_repo\io\netty\netty-resolver\4.1.51.Final\netty-resolver-4.1.51.Final.jar;E:\setup\maven\maven_repo\io\netty\netty-resolver-dns\4.1.51.Final\netty-resolver-dns-4.1.51.Final.jar;E:\setup\maven\maven_repo\io\netty\netty-codec-dns\4.1.51.Final\netty-codec-dns-4.1.51.Final.jar;E:\setup\maven\maven_repo\io\netty\netty-handler\4.1.51.Final\netty-handler-4.1.51.Final.jar;E:\setup\maven\maven_repo\javax\cache\cache-api\1.1.1\cache-api-1.1.1.jar;E:\setup\maven\maven_repo\io\projectreactor\reactor-core\3.3.9.RELEASE\reactor-core-3.3.9.RELEASE.jar;E:\setup\maven\maven_repo\org\reactivestreams\reactive-streams\1.0.3\reactive-streams-1.0.3.jar;E:\setup\maven\maven_repo\com\fasterxml\jackson\dataformat\jackson-dataformat-yaml\2.11.2\jackson-dataformat-yaml-2.11.2.jar;E:\setup\maven\maven_repo\com\fasterxml\jackson\core\jackson-core\2.11.2\jackson-core-2.11.2.jar;E:\setup\maven\maven_repo\com\fasterxml\jackson\core\jackson-databind\2.11.2\jackson-databind-2.11.2.jar;E:\setup\maven\maven_repo\net\bytebuddy\byte-buddy\1.10.14\byte-buddy-1.10.14.jar;E:\setup\maven\maven_repo\org\jodd\jodd-bean\3.7.1\jodd-bean-3.7.1.jar;E:\setup\maven\maven_repo\org\jodd\jodd-core\3.7.1\jodd-core-3.7.1.jar;E:\setup\maven\maven_repo\com\baomidou\mybatis-plus\2.2.0\mybatis-plus-2.2.0.jar;E:\setup\maven\maven_repo\com\baomidou\mybatis-plus-support\2.2.0\mybatis-plus-support-2.2.0.jar;E:\setup\maven\maven_repo\com\baomidou\mybatis-plus-core\2.2.0\mybatis-plus-core-2.2.0.jar;E:\setup\maven\maven_repo\com\baomidou\mybatis-plus-generate\2.2.0\mybatis-plus-generate-2.2.0.jar com.springboot.test.LongTest
初始值: 100001  value: 33
i的值: 1 二进制:10000  value: 16
i的值: 2 二进制:1000  value: 8
i的值: 3 二进制:100  value: 4
i的值: 4 二进制:10  value: 2
i的值: 5 二进制:1  value: 1
i的值: 6 二进制:  value: 0
i的值: 7 二进制:  value: 0
i的值: 8 二进制:  value: 0
i的值: 9 二进制:  value: 0
i的值: 10 二进制:  value: 0
i的值: 11 二进制:  value: 0
i的值: 12 二进制:  value: 0
i的值: 13 二进制:  value: 0
i的值: 14 二进制:  value: 0
i的值: 15 二进制:  value: 0
i的值: 16 二进制:  value: 0
i的值: 17 二进制:  value: 0
i的值: 18 二进制:  value: 0
i的值: 19 二进制:  value: 0
i的值: 20 二进制:  value: 0
i的值: 21 二进制:  value: 0
i的值: 22 二进制:  value: 0
i的值: 23 二进制:  value: 0
i的值: 24 二进制:  value: 0
i的值: 25 二进制:  value: 0
i的值: 26 二进制:  value: 0
i的值: 27 二进制:  value: 0
i的值: 28 二进制:  value: 0
i的值: 29 二进制:  value: 0
i的值: 30 二进制:  value: 0
i的值: 31 二进制:  value: 0
i的值: 32 二进制:100001  value: 33
i的值: 33 二进制:10000  value: 16
i的值: 34 二进制:1000  value: 8
i的值: 35 二进制:100  value: 4
i的值: 36 二进制:10  value: 2
i的值: 37 二进制:1  value: 1
i的值: 38 二进制:  value: 0
i的值: 39 二进制:  value: 0
i的值: 40 二进制:  value: 0
i的值: 41 二进制:  value: 0
i的值: 42 二进制:  value: 0
i的值: 43 二进制:  value: 0
i的值: 44 二进制:  value: 0
i的值: 45 二进制:  value: 0
i的值: 46 二进制:  value: 0
i的值: 47 二进制:  value: 0
i的值: 48 二进制:  value: 0
i的值: 49 二进制:  value: 0
i的值: 50 二进制:  value: 0
i的值: 51 二进制:  value: 0
i的值: 52 二进制:  value: 0
i的值: 53 二进制:  value: 0
i的值: 54 二进制:  value: 0
i的值: 55 二进制:  value: 0
i的值: 56 二进制:  value: 0
i的值: 57 二进制:  value: 0
i的值: 58 二进制:  value: 0
i的值: 59 二进制:  value: 0
i的值: 60 二进制:  value: 0
i的值: 61 二进制:  value: 0
i的值: 62 二进制:  value: 0
i的值: 63 二进制:  value: 0
i的值: 64 二进制:100001  value: 33
i的值: 65 二进制:10000  value: 16
i的值: 66 二进制:1000  value: 8
i的值: 67 二进制:100  value: 4
i的值: 68 二进制:10  value: 2
i的值: 69 二进制:1  value: 1
i的值: 70 二进制:  value: 0
i的值: 71 二进制:  value: 0
i的值: 72 二进制:  value: 0
i的值: 73 二进制:  value: 0
i的值: 74 二进制:  value: 0
i的值: 75 二进制:  value: 0
i的值: 76 二进制:  value: 0
i的值: 77 二进制:  value: 0
i的值: 78 二进制:  value: 0
i的值: 79 二进制:  value: 0
i的值: 80 二进制:  value: 0
i的值: 81 二进制:  value: 0
i的值: 82 二进制:  value: 0
i的值: 83 二进制:  value: 0
i的值: 84 二进制:  value: 0
i的值: 85 二进制:  value: 0
i的值: 86 二进制:  value: 0
i的值: 87 二进制:  value: 0
i的值: 88 二进制:  value: 0
i的值: 89 二进制:  value: 0
i的值: 90 二进制:  value: 0
i的值: 91 二进制:  value: 0
i的值: 92 二进制:  value: 0
i的值: 93 二进制:  value: 0
i的值: 94 二进制:  value: 0
i的值: 95 二进制:  value: 0
i的值: 96 二进制:100001  value: 33
i的值: 97 二进制:10000  value: 16
i的值: 98 二进制:1000  value: 8
i的值: 99 二进制:100  value: 4

Process finished with exit code 0

解释:

Java运算时默认将操作数扩展为int(long位数大于int所以不会变化),所以int,short,boolean结果都是32位一次循环。当位运算位数为32的时候,和原值一样。所以

value >>> 32得到的值和原始值一样

那么

异或运算 value ^ value 得到的值就和原始值一致了

至此 ,我们得出结论:

value值大小相同的Integer和Long,其对应的hashCode值必定一样

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值