我的第一篇博客,谈谈java的值传递

来源:互联网 发布:ubuntu删除文件命令 编辑:程序博客网 时间:2024/05/16 14:07

我的第一篇博客,还是个小菜鸟,欢迎老鸟们指教。
虽然工作两年了,但是每天忙忙碌碌,碌碌无为。于是是时候梳理一下了,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());}

输出结果:小郭
这个结果证明了我的推论,即在调用方法的时候将引用值传递到了方法里面,然而,这个引用的值改变对于方法外面是没有影响的。

0 0