📂Java
🔖Java
2022-09-28 21:50阅读: 69评论: 0推荐: 0

Java基础 值传递和引用传递

Java基础 值传递和引用传递

1.问题描述

由于Java中是没有指针的,Java中只存在值传递,只存在值传递!!!!‘
在实际使用中,我们经常使用对象的传递,这种看起来很像引用传递,可以改变对象中某个属性的值。但在底层运用中,这种传递实际上这个传入函数的值是对象引用的拷贝,即传递的是引用的地址值,所以还是按值传递。
综上,对于Java中方法值传递的问题,可以分为以下两点:

  1. 对于八种基本数据类型来说,在传递过程中,会自动生成一个新的基本数据。对于基本的数值类型其实传递的是一份数值的拷贝,传入函数之后跟原来的值就没有关系了,在函数中改变这个数的值也不会影响到原来的值。
  2. 对于引用数据来说,在传递过程中,会将方法调用处的对象地址赋给方法列表中的参数,而不是生成一个新的对象。

2.代码测试

2.1 基本数据类型

public class Question1 {

    public static void main(String[] args) {
        int a=10;
        System.out.println("方法执行前");
        show(a);
        changeA(a);
        System.out.println("方法执行后");
        show(a);
    }

    private static void changeA(int a) {

        a=100;
        System.out.println("方法执行期间");
        show(a);

    }

    private static void show(int a) {
        System.out.println("a的值是:"+a);
    }

}

输出

方法执行前
a的值是:10
方法执行期间
a的值是:100
方法执行后
a的值是:10

2.2 对象数据类型:

public class Question1_2 {
    public static void main(String[] args) {
        User user =new User("tom",1);
        System.out.println("方法执行前");
        show(user);
        changeUser(user);
        System.out.println("方法执行后");
        show(user);
    }

    private static void changeUser(User user) {
        user=new User("jary",2);
        System.out.println("方法执行中");
        show(user);

    }

    private static void show(User user) {
        System.out.println(user.toString());
    }

}

输出:

方法执行前
User{name='tom', age=1}
方法执行中
User{name='jary', age=2}
方法执行后
User{name='tom', age=1}

3 解析

对于基本数据类型,相当于重现创建了一个基本数据类型,只是在数值上与原有的一样。方法内部改变数据后,也不会对方法外部的原有的值进行任何改变。

对于对象数据类型,相当于把自己的地址值传递给了方法内部的对象引用。若方法内部的都对象引用对指向的对象进行了内部改变(改变了对象内部的属性),则将会直接影响方法外部的数据;若方法内部的对象引用进行了对象间的改变(重现生成了一个对象,或者对对象引用进行了指向性的改变),则不会改变方法外部的任何值,因为外部a的对象引用没变。

4 结论

因此,Java中只存在值传递,对于基本数据类型,相当于重新创建一个值,并将原来的值赋给方法内的类型。对于对象数据类型,相当于把方法外部的地址值传递给了方法内部的对象引用。

本文作者:weliars

本文链接:https://www.cnblogs.com/weliars/p/16739704.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   weliars  阅读(69)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起