[Haftungsausschluss: Dies ist eine absichtlich meinungsstarke Art der Antwort, da ich der Meinung bin, dass eine eher "macht das bloß nicht zu Hause, Kinder" Antwort angebracht ist]
Die Sünde ist die Zeile field.setAccessible(true);
, die besagt, dass das öffentliche API verletzt wird, indem der Zugriff auf ein privates Feld ermöglicht wird. Das ist ein riesiges Sicherheitsrisiko, das durch Konfigurieren eines Sicherheitsmanagers behoben werden kann.
Das Phänomen in der Frage sind Implementierungsdetails, die Sie niemals sehen würden, wenn Sie diese gefährliche Zeile mit Hilfe von Reflection nicht verwenden würden, um die Zugriffsmodifizierer zu verletzen. Klar ist, dass zwei (normalerweise) unveränderliche Strings dasselbe Zeichenarray teilen können. Ob ein Teilstring dasselbe Array teilt, hängt davon ab, ob er es kann und ob der Entwickler dachte, es zu teilen. Normalerweise handelt es sich um unsichtbare Implementierungsdetails, die Sie nicht kennen müssen, es sei denn, Sie schießen den Zugriffsmodifizierer mit dieser Zeile Code in den Kopf.
Es ist einfach keine gute Idee, sich auf solche Details zu verlassen, die ohne Verletzung der Zugriffsmodifizierer mittels Reflection nicht erfahrbar sind. Der Eigentümer dieser Klasse unterstützt nur das normale öffentliche API und ist frei, Implementierungsänderungen in der Zukunft vorzunehmen.
Trotz all dem ist die Zeile Code wirklich sehr nützlich, wenn Ihnen eine Waffe an den Kopf gehalten wird und Sie zu solch gefährlichen Dingen gezwungen werden. Die Verwendung dieses Hintereingangs ist in der Regel ein Codegeruch, der darauf hinweist, dass Sie auf bessere Bibliothekscode aufrüsten müssen, bei dem Sie nicht sündigen müssen. Eine weitere häufige Verwendung dieser gefährlichen Zeile Code ist die Entwicklung eines "Voodoo-Frameworks" (ORM, Injektionscontainer, ...). Viele Leute werden in Bezug auf solche Frameworks religiös (sowohl dafür als auch dagegen), daher werde ich darauf verzichten, einen Glaubenskrieg auszulösen, indem ich nichts weiter sage, als dass die überwältigende Mehrheit der Programmierer nicht dorthin gehen muss.