我的第一篇博客,还是个小菜鸟,欢迎老鸟们指教。
虽然工作两年了,但是每天忙忙碌碌,碌碌无为。于是是时候梳理一下了,java的一些基本知识自己还不是很理解,这两天在看相关方面的文章。今天又学到一一点东西,特地写下来,分享给自己,也分享给和我一样不知道的小鸟们。
那么咱们就来谈谈java的方法传参是引用传递,还是值传递?我以前的回答必须是引用传递,因为我就这么干过:
public static void swapObj(User user){
//通过一些列方法获得user的其他信息,然后set给传进来的user
user.setId(123);
user.setUserAge("18");
}
public static void main(String[] args) {
User user = new User();
user.setUserName("小郭");
swapObj(user);
System.out.println(user.getUserName());
System.out.println(user.getUserAge());
System.out.println(user.getId());
}
输出结果:
小郭
18
132
我就是根据这个认为引用传递的,但是我发现我错了因为又有一段代码:
public static void swapInt(int b){
b=5;
}
public static void main(String[] args) {
int a =6;
swapInt(a);
System.out.println(a);
}
输出结果:
6
于是我就纠结的,这明显传递的不是引用啊,传递的是值啊。经过看了几篇文章,觉得应该这么理解,它是值传递,基本类型的话传递值,引用的话传递引用的值,也就是说这个引用被传进里面了,但是引用不会被改变,写个代码来验证一下:
public static void swapObj(User user) {
User user2 = new User();
user2.setUserName("小李");
user = user2;
}
public static void main(String[] args) {
User user = new User();
user.setUserName("小郭");
swapObj(user);
System.out.println(user.getUserName());
}
输出结果:小郭
这个结果证明了我的推论,即在调用方法的时候将引用值传递到了方法里面,然而,这个引用的值改变对于方法外面是没有影响的。