java的jvm在执行java程序的时候,会给新建的对象分配一个唯一的标识,请问这个唯一标识怎么获取阿???

Python015

java的jvm在执行java程序的时候,会给新建的对象分配一个唯一的标识,请问这个唯一标识怎么获取阿???,第1张

可以使用对象的toString()方法,回返回一个字符串,字符串后半部分的哈希码就是唯一的。

toString

public String toString()返回该对象的字符串表示。通常,toString 方法会返回一个“以文本方式表示”此对象的字符串。结果应是一个简明但易于读懂。建议所有子类都重写此方法。

Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于:

getClass().getName() + '@' + Integer.toHexString(hashCode())

返回:

该对象的字符串表示形式。

//先看不加参数的源码

public static UUID randomUUID() {

        SecureRandom ng = Holder.numberGenerator

        byte[] randomBytes = new byte[16]

        ng.nextBytes(randomBytes)

        randomBytes[6]  &= 0x0f  /* clear version        */

        randomBytes[6]  |= 0x40  /* set to version 4     */

        randomBytes[8]  &= 0x3f  /* clear variant        */

        randomBytes[8]  |= 0x80  /* set to IETF variant  */

        return new UUID(randomBytes)//看到这里没,其实也是调用的带参数的,只不过

        //所带参数的是给你随机出来的

    }

    

    //再看带参数的

     public static UUID nameUUIDFromBytes(byte[] name) {

        MessageDigest md

        try {

            md = MessageDigest.getInstance("MD5")

        } catch (NoSuchAlgorithmException nsae) {

            throw new InternalError("MD5 not supported")

        }

        byte[] md5Bytes = md.digest(name)//这里就是对给的byte[]参数进行md5运算之后再进行计算UUID

        md5Bytes[6]  &= 0x0f  /* clear version        */

        md5Bytes[6]  |= 0x30  /* set to version 3     */

        md5Bytes[8]  &= 0x3f  /* clear variant        */

        md5Bytes[8]  |= 0x80  /* set to IETF variant  */

        return new UUID(md5Bytes)

    }

UUID uuid=UUID.randomUUID()

System.out.println(uuid.toString())

UUID含义是通用唯一识别码 (Universally Unique Identifier),这 是一个软件建构的标准,也是被开源软件基金会 (Open Software Foundation, OSF) 的组织应用在分布式计算环境 (Distributed Computing Environment, DCE) 领域的一部分。