Here’s a curve ball, maybe someone can explain it to me.
Apparently someone decided Wrapper classes won’t act like references, but like values?
Program Output:
[quote]intital primitive int: 6
value returned by method call: 100
after method call: 6
inital Wrapper value: 12
value returned by method call: 100
after method call: 12
initial Atomic value: 24
value returned by method call: 100
after method call: 24
correct method primitive: 30
value returned by method call: 100
after method call: 100
Process completed.
[/quote]
Source Code:
public class TestPassByRef
{
public static void main( String [] args )
{
/* not supposed to work. Pass By Value */
int i = 6;
System.out.println( "intital primitive int: " + i );
changeInt( i );
System.out.println( "after method call: " + i );
/* Doesn't work. Pass By Ref acts like Pass By Value*/
Integer wrapperI = new Integer( 12 );
System.out.println( "\ninital Wrapper value: " + wrapperI );
changeInteger( wrapperI );
System.out.println( "after method call: " + wrapperI );
/* Doesn't work also. */
AtomicInteger ai = new AtomicInteger( 24 );
System.out.println( "\ninitial Atomic value: " + ai );
changeAtomicInteger( ai );
System.out.println( "after method call: " + ai );
/* what should be done */
int i2 = 30;
System.out.println( "\ncorrect method primitive: " + i2 );
i2 = changeInt( i2 ); //assign return value of method to original integer
System.out.println( "after method call: " + i2 );
}
private static Integer changeInt( int i )
{
i = 100;
System.out.println( "value returned by method call: " + i );
return i;
}
private static Integer changeInteger( Integer i )
{
i = 100;
System.out.println( "value returned by method call: " + i );
return i;
}
private static AtomicInteger changeAtomicInteger( AtomicInteger i )
{
i = new AtomicInteger( 100 );
System.out.println( "value returned by method call: " + i );
return i;
}
}