希望有大佬指教一下,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
setInttt(tempInt);
out.println(tempInt);
}public static Integer getInttt(Integer t) {
t = new Integer(5555);
return t;
}输出的结果是:null求大佬指教为什么输出的结果是null 而不是5555
你只写了get方法,没有set方法,值当然不会变。
你只写了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);
}
因为 赋值只对方法set中的变量t起作用,对外部变量没有产生影响。
java只有值传递
参考这个
https://www.cnblogs.com/xiaoxiaoyihan/p/4883770.html
java 类应该是传递的类的内存地址
类a,b 保存的应该是类的内存地址,第2个例子是因为内存地址中部分值被改变了,所以类内部变量发生了变化,但是a,b的内存地址不会被改变,只是被x,y引用了,因为没有改变了类地址内数据变化,所以a,b没有变化。所以回到楼主的问题,tempInt 传递的是内存地址,tempInt内存地址内的值在set方法未改变,set方法内只是把变量t的内存地址从tempInt指向了new Integer(5555)内存地址,而tempInt 内存地址内的值还是null。
2、Integer等的包装类是immutable类型,不可变,可以看做值传递。
3、当引用数据类型的实参是null时,实际上也是执行的值传递。
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