java 值传递简单分析(以String和pojo对象举例)

先看代码:

public static void main(String[] args) {
        String str = "abc";
        User user = new User();
        user.setName("张三");
        user.setAge(10);
        run(str, user);
        System.out.println(str);
        System.out.println(user.getName());
    }

    public static void run(String str, User user) {
        str = "cd";
        user.setName("李四");
    }

大家觉得输出会是怎样的呢?

正确的输出是:

abc
李四

有的童鞋可能会懵逼,有的童鞋可能觉得这个太简单了吧,这还要单独写一篇文章。

Java新手可能有点不太明白这个的原理,很多用Java多年的老手,可能平时主要是写业务代码,然后平时呢,也不爱看书,不注重基础的童鞋,可能也不明白这个的原理。

所以,我要是问你这个其中的原理,为什么会是这样,你能答上来吗。

废话不多说,下面开始分析原理:

这样是否就明白了,在run方法进行str = "cd"的操作根本就不会影响到main方法中的str所指向的值。

形参:是指在定义方法时列出的参数,用来接收方法调用时传递过来的数据。简单地说,我们定义方法时写出的那些参数都是形参。形参只有在被调用时才会被分配内存空间,一旦调用结束就会释放占用的空间,因此仅在方法内有效,属于一种局部变量,针对形参的改动无法影响到方法外。

实参:在调用有参方法时,主调方法和被调方法之间需要进行数据传递。被调用方法名后面括号中的参数就是“实际参数”,所以实参是调用方法时实际传递给该方法的参数。实参会被预先创建并赋予确定的值。

下面再来看user的图:

这样是不是就一目了然了,str与user的结果表现不一样的原因也就在这里了。

大家平时也要多举一反三,这样才能学到东西。

重要知识点:

Java语言中参数传递的是拷贝,基本类型传递的是值的拷贝,引用类型传递的是内存地址的拷贝。当一个对象实例作为一个参数被传递到方法中,参数的值就是对该对象的内存地址。所以Java的参数传递都是值传递,而没有引用传递!即使是引用类型的参数,也是值传递,而这个值,实际上是引用对象的引用地址。

总之,在Java方法传参时,无论传递的参数是基本类型还是引用类型,都是值传递!切记一点,Java里面只有值传递,没有引用传递!

posted @ 2023-08-24 20:30  Aaronqcd  阅读(6)  评论(0编辑  收藏  举报