这个结果为什么是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?

解决方案 »

  1.   

    public static void test(Integer i){ 
            i= new Integer(100); 
    } 这个方法返回值是void
    所以根本没有改变is的值,因此返回5
      

  2.   

    在函数内部,Integer i是临时的,虽然给付饿新值,但是调用以后就自动销毁,所以保持原来的值,是不变的,要是想变的话,只能在函数里调用这个对象的成员方法进行设置
      

  3.   

    又回到一个古来的话题,java是传值还是传引用
    楼主的问题是传给test方法的参数只是is的一个副本,
    对副本的操作是不影响is本身的值的
      

  4.   

    从内存的角度考虑:方法在调用过程中如果使用的是局部变量,而不是全局变量,将不会对传入的值有所改变;
    从java传递的角度:java只有值传递;
      

  5.   

    关键是这一句 i= new Integer(100); 
    函数中的变量i和main方法is在这条语句执行前所引用的地址是一个
    要是输出值得话也是相同的,但是执行了这条语句后,它改变了i的
    引用地址和值,就和main里的is不是同一个引用了,他的改变不能
    在影响到main里的is,所以就看到了所看到的结果。
      

  6.   

    public static void main 是主函数 当然要执行主函数里的东西的,外面的不用看,用我们老师的话来讲是一个测试函数
      

  7.   


    同 意,建议楼主看看
    从这个方向来理解就很明显了
    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); 


      

  8.   

    java 的参数传递是值传递,是那个参数的一个拷贝,不会影响到其本身
      

  9.   

    我觉得neusoftware_20063500说的比较好解释。在函数内部,Integer i是临时的,虽然给付饿新值,但是调用以后就自动销毁,所以保持原来的值,是不变的,要是想变的话,只能在函数里调用这个对象的成员方法进行设置
      

  10.   

    6楼正解
    public class Test3 { 
     private Integer s = new Integer(100); 
    public static void test(Integer i){ 
            i= s;

    如果这样,应该输出100。可以试试(我没试)。
      

  11.   

    少了个static 
    private static Integer s = new Integer(100); 
      

  12.   

    第一个main()无返回值,没有改变值,所以返回5了
      

  13.   

    严重同意,因为i是个临时变量,用完销毁,在函数的内部,没有用i这个指针改变is变量应用Integer(5)这个对象任何内部变量,所以指向Integer(5)的is变量不会改变。
      

  14.   

    在test方法中打一下值是100,出了方法之后就不是了
      

  15.   

    一句话:改变形参的值,不会影响到实参.
    但这句话当遇到指针的时候会不好理解.在这个例子中,i= new Integer(100); 是让i指向一个新的Integer对象(原来的时候i指向实参对象).但这并不会影响实参引用的指向.
    但如果直接在方法中改变i指向的对象的值,则会影响到实参引用指向的对象.
    (有点绕嘴,请LZ好好理解 希望 可以帮到你)