Ich habe zwei Instanzen von java.util.UUID
wie unten angegeben erstellt. Einer wird aus UUID.randomUUID()
erstellt und der andere ist der gleiche, aber mit einigen zusätzlichen Ziffern am Anfang vorangestellt. Wenn diese mit der Methode UUID.equals
verglichen werden, wird true
:
Ich denke, die hinzugefügten Ziffern werden verworfen und beide geben den gleichen UUID-String-Wert an. Warum passiert das?
In der Methode UUID.fromString (...) haben Sie Folgendes:
%Vor%Das erste, was es tut, um die Teile der UUID in Komponenten zu trennen, dann erzeugt es zwei Longs. Hier haben Sie nur die erste Komponente der UUID geändert, indem Sie führende Zeichen hinzugefügt haben. Ihre UUID-Zeichenfolge lautet beispielsweise " 12345 894ff97a-039b-47fe-8a72-950b7766d50c". Also die erste Komponente ist " 12345 894ff97a", wenn es geht
%Vor%Dann haben Sie "320256540146042", die tatsächliche HEX-Darstellung ist " 12345 894ff97a", dann haben Sie eine Bitoperation, die die langen 16 Bits nach links verschiebt:
%Vor%Dies führt zu "2541588541301456896", die tatsächliche HEX-Darstellung ist " 2345 894ff97a0000" (wir haben 16 Bits also 4 hex Zeichen verschoben) und Sie beginnen zu sehen, was passiert, sehen Sie das lange Format ist nur 64 Bits, so dass beim Verschieben der Bits einige verloren gehen, hier geht das erste Zeichen "1" verloren. Danach wird im freigewordenen Raum die zweite Komponente hinzugefügt:
%Vor%Dies führt zu "2541588541301457819", die tatsächliche HEX-Darstellung ist " 2345 894ff97a039b", dann werden die langen 16 Bits wieder nach links verschoben:
%Vor%Dies führt zu "-8552342864911466496", die tatsächliche HEX-Darstellung ist "894ff97a039b0000" und hier sind Ihre führenden Zeichen alle wegen der langen 64-Bit-Größe verloren.
Ich muss den Rest der Methode nicht erklären (am Ende ist mostSigBits "894ff97a039b47fe" und leastSigBits ist "8a72950b7766d50c"), Sie können bereits verstehen, dass jedes führende Zeichen, das zu einer UUID hinzugefügt wird, beim Aufruf von UUID verloren geht .fromString (..) da nur die letzten 8 Hex-Zeichen (32 Bit) berücksichtigt werden, geht der Rest verloren.
Weil Sie nicht zwei unterschiedliche UUIDs erstellen.
UUID.fromString("12345"+uuid1.toString());
macht keinen Sinn: UUID.fromString(String)
erfordert, dass der übergebene String der 'String-Standarddarstellung' folgt, wie in UUID.toString()
beschrieben. Siehe UUID.fromString () und UUID.toString () .
Ich frage mich, warum Sie keine Ausnahme bekommen, aber ich denke, Ihre ersten paar Zeichen werden ignoriert.