Permalänk
Medlem

simpel javafråga

Om jag har två objekt med var sin referens till samma Integer-objekt. Kan jag då ändra värde på det Integer-objektet utan att behöva trixa i dom två objekten?

a.tal = new Integer(5);
b.tal = a.tal;
a.tal = 69;

Är b.tal oxå 69 här? Jag hittade ingen Integer.setValue() så jag är osäker på vad som egentligen händer.

edit: Gjorde en egen Integer-klass och nu funkar det, orkade inte tjafsa mer

Visa signatur

www.filipsprogram.tk - lite freeware
"Delight, herregud. Talang är bara förnamnet."

Permalänk
Medlem

Nu har du ju iof gått runt problemet genom att göra en egen int-wrapper, men du skulle kanske vara intresserad av en lösning problemet ändå.

Problemet kring att ändra på en Integers värde ligger ju i att värdet lagras som "private final int value".
Så det är ju inte tänkt att det ska gå att ändra på värdet.

Däremot om du verkligen vill ändra på värdet så skulle du ju kunna göra följande:

import java.lang.reflect.Field; public class IntUpdater { public static void main(String[] args) { Integer a,b; a=5; b=a; updateInteger(a, 99); System.out.println(b);//Prints the value of a (99) } public static void updateInteger(Integer a,int b) { try { //Get field where the value is stored Field field = Integer.class.getDeclaredField("value"); //Ignore that the field is declared "private final" field.setAccessible(true); //Change value field.setInt(a,b); } catch (SecurityException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); } } }

Bör ju hantera exception på lite bättre sett, men du ser ju hur du kan göra iaf.

Visa signatur

The difference between stupidity and genius - the latter has limits

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Zevon
Nu har du ju iof gått runt problemet genom att göra en egen int-wrapper, men du skulle kanske vara intresserad av en lösning problemet ändå.

Problemet kring att ändra på en Integers värde ligger ju i att värdet lagras som "private final int value".
Så det är ju inte tänkt att det ska gå att ändra på värdet.

Däremot om du verkligen vill ändra på värdet så skulle du ju kunna göra följande:
...

Fräsigt värre! Hade ingen aning om att man kunde gå runt begränsningarna på det där sättet

Visa signatur

www.filipsprogram.tk - lite freeware
"Delight, herregud. Talang är bara förnamnet."

Permalänk
Medlem

..... nu blev ju java roligt, najs

Citat:

Ursprungligen inskrivet av Zevon
Nu har du ju iof gått runt problemet genom att göra en egen int-wrapper, men du skulle kanske vara intresserad av en lösning problemet ändå.

Problemet kring att ändra på en Integers värde ligger ju i att värdet lagras som "private final int value".
Så det är ju inte tänkt att det ska gå att ändra på värdet.

Däremot om du verkligen vill ändra på värdet så skulle du ju kunna göra följande:

import java.lang.reflect.Field; public class IntUpdater { public static void main(String[] args) { Integer a,b; a=5; b=a; updateInteger(a, 99); System.out.println(b);//Prints the value of a (99) } public static void updateInteger(Integer a,int b) { try { //Get field where the value is stored Field field = Integer.class.getDeclaredField("value"); //Ignore that the field is declared "private final" field.setAccessible(true); //Change value field.setInt(a,b); } catch (SecurityException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); } } }

Bör ju hantera exception på lite bättre sett, men du ser ju hur du kan göra iaf.