k*****y 发帖数: 744 | 1 static void inc( Integer n ){
++n;
}
public static void main( String[] args ) {
Integer n = 0;
inc( n );
System.out.println( n );
}
显示结果还是0,java里有什么方法实现把main里的n变成1? thanks. |
e*****t 发帖数: 1005 | 2 use return value. If you want to use an argument of the method, you have to
use a mutable object.
primitives are not objects and wrapper objects are immutable.
【在 k*****y 的大作中提到】 : static void inc( Integer n ){ : ++n; : } : public static void main( String[] args ) { : Integer n = 0; : inc( n ); : System.out.println( n ); : } : 显示结果还是0,java里有什么方法实现把main里的n变成1? thanks.
|
J*******n 发帖数: 2901 | |
f*******n 发帖数: 12623 | 4 ++n;
is the same as
n = n + 1;
Assigning to a local variable (any type) never has any effect outside the function. |
F****n 发帖数: 3271 | 5 static void inc(int[] n ){
++n[0];
}
public static void main( String[] args ) {
int[] n = new int[]{0};
inc( n );
System.out.println( n[0] );
}
【在 k*****y 的大作中提到】 : static void inc( Integer n ){ : ++n; : } : public static void main( String[] args ) { : Integer n = 0; : inc( n ); : System.out.println( n ); : } : 显示结果还是0,java里有什么方法实现把main里的n变成1? thanks.
|
x*******6 发帖数: 262 | 6 Integer i = 1;i++ 这个过程是将相当于是 i= Integer.valueOf(i+1)
你将n传递给inc()时传过去的是复制的n(另一个指向 Integer object 的reference
),而n++相当于给那个复制的reference重新指向一个Integer object,当然不会影响
到main方法里原本的n指向的object了 |
r***y 发帖数: 4379 | 7 -- 你将n传递给inc()时传过去的是复制的n
错了, 哪里有"复制" 一说, 是 pass by reference, 然后因为 immutable , inc() 内
object 就多了一个
reference
【在 x*******6 的大作中提到】 : Integer i = 1;i++ 这个过程是将相当于是 i= Integer.valueOf(i+1) : 你将n传递给inc()时传过去的是复制的n(另一个指向 Integer object 的reference : ),而n++相当于给那个复制的reference重新指向一个Integer object,当然不会影响 : 到main方法里原本的n指向的object了
|
x*****p 发帖数: 1707 | 8 You can use reflection in inc method and make Integer mutable.
【在 k*****y 的大作中提到】 : static void inc( Integer n ){ : ++n; : } : public static void main( String[] args ) { : Integer n = 0; : inc( n ); : System.out.println( n ); : } : 显示结果还是0,java里有什么方法实现把main里的n变成1? thanks.
|