优秀的编程知识分享平台

网站首页 > 技术文章 正文

java的值传递和引用传递(java 传值传引用区别)

nanyue 2024-10-22 13:12:17 技术文章 4 ℃



先看一个例子

//定义一个对象
public class Student {
    String name;
}
//测试类
public class TestClass {
    public static void main(String[] args) {
        Student stu1;
        stu1 = new Student();
        stu1.name = "小明";
        int a = 10;
        System.out.println("改变前,stu1名字为" + stu1.name);
        System.out.println("改变前,a的值为" + a);

        TestClass myTest = new TestClass();
        myTest.change(a, stu1);
        System.out.println("改变后,stu1名字为" + stu1.name);
        System.out.println("改变后,a的值为" + a);
        }

    void change(int num, Student student) {
        num = num + 10;
        student.name = "小强";}
}
运行结果为:
改变前,stu1名字为小明
改变前,a的值为10

改变后,stu1名字为小强
改变后,a的值为10

这个怎么理解呢?

对于基本数据类型,我们向change方法传参数时,传的是基本数据类型的值,也就是将10这个值传递到了change方法中,对于change方法,传入的参数相当于:int num=10,这时方法内部对num变量进行增加,并不影响到方法外部的a的值。

对于引用数据类型,我们向change方法传入参数时,传的是new Student()这个对象在堆中的地址,我们将地址值传递到change方法中,对于change方法,传入的参数相当于:Student student=地址值,这时候对对象进行操作,相当于还是对方法外部的对象进行操作,因为传的是地址,这个地址指向的就是外部的new Student()

但对于String这个类来说,如果传一个string的对象,方法内部对对象进行赋值,比如:s="aaa",这个aaa相当于一个新的string对象,对于传入方法的string引用地址,相当于s指向了一个新的"aaa"的引用地址,所以外部的字符串引用并不会改变

最近发表
标签列表