首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

解释上这个结果

2012-12-18 
解释下这个结果public class Test {public static void add3(Integer i) {int val i.intValue()val +

解释下这个结果
public class Test {
public static void add3(Integer i) {
int val = i.intValue();
val += 3;
i = new Integer(val);
//return i;
}

public static void main(String[] args) {
Integer i = new Integer(0);
add3(i);
System.out.println(i.intValue());
}
}
控制台打印;0
[最优解释]
add3里面的i跟你外面的i不是同一个。
方法里面的i是外面i的一个引用。在栈里面是2个数据
但是方法传递的时候,同时指向堆里面的对象。

当你对引用进行操作的时候,它又重新在堆里面建立了相对于的对象,那么它对外面的引用也就没用了

你在方法里面改变的i的值只是传进来引用的i,而不是外面那个i

其实如果你不把方法里面的参数设置成一样好理解一点

public class Test {
public static void add3(Integer i1) {
int val = i1.intValue();
val += 3;
i1 = new Integer(val);
//return i;
}

public static void main(String[] args) {
Integer i = new Integer(0);
add3(i);
System.out.println(i.intValue());
}
}

你那么写是在弄懂了关系的情况下,其实他们只不过名字一样,内容是不一样。
如按照我的写法,你就能避免主观认为两个i是一样的。

[其他解释]

i = new Integer(val);

上面这句在方法里生成一个新的对象,让方法里的变量i指向了这个新的对象,与外边的i没有关系了。
[其他解释]
引用:
Java code?1i = new Integer(val);
上面这句在方法里生成一个新的对象,让方法里的变量i指向了这个新的对象,与外边的i没有关系了。
说的很直白了

热点排行