这个结果为什么是5
谁能解释一下啊吗?
谢谢
public class Test3 {
public static void test(Integer i){
i= new Integer(100);
}
public static void main(String[] args) {
Integer is= new Integer(5);
test(is);
System.out.println(is);
}
}
为什么不输出100?
谁能解释一下啊吗?
谢谢
public class Test3 {
public static void test(Integer i){
i= new Integer(100);
}
public static void main(String[] args) {
Integer is= new Integer(5);
test(is);
System.out.println(is);
}
}
为什么不输出100?
i= new Integer(100);
} 这个方法返回值是void
所以根本没有改变is的值,因此返回5
楼主的问题是传给test方法的参数只是is的一个副本,
对副本的操作是不影响is本身的值的
从java传递的角度:java只有值传递;
函数中的变量i和main方法is在这条语句执行前所引用的地址是一个
要是输出值得话也是相同的,但是执行了这条语句后,它改变了i的
引用地址和值,就和main里的is不是同一个引用了,他的改变不能
在影响到main里的is,所以就看到了所看到的结果。
同 意,建议楼主看看
从这个方向来理解就很明显了
public class Test3 {
public static void test(Integer i){
i= new Integer(100);
}
public static void main(String[] args) {
Integer is= new Integer(5); //is指向 integer (5)
test(is); //在栈中创建变量i,把5传给i,然后i再指向integer (5),最后i消失,is始终指向integer (5)
System.out.println(is);
}
}
public class Test3 {
private Integer s = new Integer(100);
public static void test(Integer i){
i= s;
}
如果这样,应该输出100。可以试试(我没试)。
private static Integer s = new Integer(100);
但这句话当遇到指针的时候会不好理解.在这个例子中,i= new Integer(100); 是让i指向一个新的Integer对象(原来的时候i指向实参对象).但这并不会影响实参引用的指向.
但如果直接在方法中改变i指向的对象的值,则会影响到实参引用指向的对象.
(有点绕嘴,请LZ好好理解 希望 可以帮到你)