You are here

Přidat komentář

Error message

The spam filter installed on this site is currently unavailable. Per site policy, we are unable to accept new submissions until that problem is resolved. Please try resubmitting the form in a couple of minutes.

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ů.

Plain text

  • No HTML tags allowed.
  • Řádky a odstavce se zalomí automaticky.