希望有大佬指教一下,Integer是一个类但是为什么在以下代码中public static void main(String[] args){        Integer tempInt = null;
        setInttt(tempInt);
        out.println(tempInt);
    }public static Integer getInttt(Integer t) {
        t = new Integer(5555);
        return t;
    }输出的结果是:null求大佬指教为什么输出的结果是null 而不是5555

解决方案 »

  1.   


    你只写了get方法,没有set方法,值当然不会变。
      

  2.   

    而且就算下面改为set,返回值也没传递给main 中的  tempInt;注意变量的作用范围。
      

  3.   


    你只写了get方法,没有set方法,值当然不会变。我写错了代码应该是这个
    public static void main(String[] args){        Integer tempInt = null;
            setInttt(tempInt);
            out.println(tempInt);
        }public static voidsetInttt(Integer t) {
            t = new Integer(5555);
            
        }
      

  4.   


    因为 赋值只对方法set中的变量t起作用,对外部变量没有产生影响。
      

  5.   

    楼上回答都没在点上
    java只有值传递
    参考这个
    https://www.cnblogs.com/xiaoxiaoyihan/p/4883770.html
      

  6.   

    这个说法也有问题吧。
    java 类应该是传递的类的内存地址
    类a,b 保存的应该是类的内存地址,第2个例子是因为内存地址中部分值被改变了,所以类内部变量发生了变化,但是a,b的内存地址不会被改变,只是被x,y引用了,因为没有改变了类地址内数据变化,所以a,b没有变化。所以回到楼主的问题,tempInt 传递的是内存地址,tempInt内存地址内的值在set方法未改变,set方法内只是把变量t的内存地址从tempInt指向了new Integer(5555)内存地址,而tempInt 内存地址内的值还是null。
      

  7.   

    1、基本数据类型是值传递,引用数据类型是引用传递。
    2、Integer等的包装类是immutable类型,不可变,可以看做值传递。
    3、当引用数据类型的实参是null时,实际上也是执行的值传递。
      

  8.   

    这个说法也有问题吧。
    java 类应该是传递的类的内存地址
    类a,b 保存的应该是类的内存地址,第2个例子是因为内存地址中部分值被改变了,所以类内部变量发生了变化,但是a,b的内存地址不会被改变,只是被x,y引用了,因为没有改变了类地址内数据变化,所以a,b没有变化。所以回到楼主的问题,tempInt 传递的是内存地址,tempInt内存地址内的值在set方法未改变,set方法内只是把变量t的内存地址从tempInt指向了new Integer(5555)内存地址,而tempInt 内存地址内的值还是null。
    别的不说,你这专业术语用的有点不准确,让人无法准确理解你到底想说什么
    比如传递的类的内存地址,应该说成传递的对象的内存地址的副本(说是内存地址也是不够准确的,姑且这么认为),副本才是导致不变化的关键,对于方法的形参来说,这个变量只是实参的copy,而不是同一个变量,所以你修改了形参的值,也不会影响实参,当然你修改了参数指向对象里的值那就是另外一回事了
    可以参考这个,形参和实参的区别
    https://www.cnblogs.com/sheropan/p/5102157.html
      

  9.   

    楼主用Integer确实不合适,Integer 确实是不可变类,每次改变Integer的值都是指向新值的内存地址。所以无法用方法改变Integer的值。