You are here

Eclipse debugger a změna hodnoty primitivního typu

Eclipse debugger, přinejmenším verze 3.4.x, povolí změnu hodnoty primitivního typu. Třídy jako Boolean nebo Integer jsou založeny na své neměnnosti. Změna fieldu má záludný vliv na všechny místa, kde se pracuje se stejnou instancí:
final Boolean tru = Boolean.TRUE;
final Integer ONE = Integer.valueOf( 1 );
final Integer one = Integer.valueOf( 1 );

System.out.println( String.format( "value: %b, Boolean.TRUE: %b, one: %d, ONE: %d",
    true, Boolean.TRUE, one, ONE ) );

// now change value of 'tru.value' to false and one.value to 0 in debugger
System.out.println( String.format( "value: %b, Boolean.TRUE: %b, one: %d, ONE: %d",
    true, Boolean.TRUE, one, ONE ) );
Výstup:
value: true, Boolean.TRUE: true, one: 1, ONE: 1
value: true, Boolean.TRUE: true, one: 0, ONE: 0
Myslíte te si, že to je dobrý nápad? Autoři IntelliJ IDEA si to nemyslí a změnu nedovolí. I když se domníváte, že přesně víte, co děláte, stále se zde skrývá další problém. Změna final fieldu nemusí být viditelná ze všech běžící threadů.